EXPLAIN und EXPLAIN ANALYZE lesen
Lesen Sie den Planbaum, verstehen Sie den Unterschied zwischen geschätzter und tatsächlicher Zeit und identifizieren Sie die aufwendigen Knoten.
EXPLAIN und EXPLAIN ANALYZE lesen ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum EXPLAIN?
EXPLAIN zeigt die Strategie des Planers zur Ausführung einer Abfrage – ohne sie auszuführen. EXPLAIN ANALYZE führt die Abfrage aus UND zeigt die tatsächlichen Zeit- und Zeilenwerte.
Grundlegendes EXPLAIN
Den geschätzten Plan anzeigen:
EXPLAIN SELECT * FROM orders WHERE user_id = 42;
-- QUERY PLAN
-- ---------------------------------------------------------------
-- Index Scan using orders_user_id_idx on orders
-- (cost=0.43..8.45 rows=5 width=120)
-- Index Cond: (user_id = 42)EXPLAIN ANALYZE
Führt die Abfrage aus und ergänzt die tatsächlichen Zeit- und Zeilenwerte:
EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 42;
-- Index Scan using orders_user_id_idx on orders
-- (cost=0.43..8.45 rows=5 width=120)
-- (actual time=0.041..0.043 rows=4 loops=1)
-- Planning Time: 0.082 ms
-- Execution Time: 0.057 msDen Baum lesen
Pläne sind Bäume. Die Einrückung kennzeichnet einen Kindknoten. Kindknoten werden vor ihren Eltern ausgeführt.
Aggregate
-> Hash Join
Hash Cond: (o.user_id = u.id)
-> Seq Scan on orders
-> Hash
-> Seq Scan on usersKosten vs. Zeit
Die cost-Spalte enthält ZWEI Zahlen: startup_cost..total_cost. Das sind beliebige Einheiten des Planers, keine Sekunden. Verwenden Sie actual time für reale Werte.
rows = geschätzt; actual rows = tatsächlich
rows ist die Schätzung des Planers. actual rows zeigt, was tatsächlich passiert ist. Wenn die Werte stark voneinander abweichen, sind die Statistiken ungenau.
loops vervielfacht die Zeit
Bei verschachtelten Schleifen bedeutet actual time=X loops=N, dass jede Iteration X gedauert hat; insgesamt ergibt das pro Knoten X×N.
Nested Loop (actual time=0.05..2.03 rows=500)
-> Seq Scan on orders (actual ... loops=1)
-> Index Scan using users_pkey (actual time=0.01..0.01 loops=500)BUFFERS zeigt Ihnen die I/O
EXPLAIN (ANALYZE, BUFFERS) meldet Buffer-Treffer und -Lesevorgänge – also die I/O hinter den Zeitangaben:
EXPLAIN (ANALYZE, BUFFERS) SELECT ...;
-- Buffers: shared hit=12 read=4FORMAT-Optionen
Für die programmatische Verarbeitung verwenden Sie JSON oder YAML:
EXPLAIN (ANALYZE, FORMAT JSON) SELECT ...;Destruktive Anweisungen nicht mit EXPLAIN ANALYZE ausführen!
EXPLAIN ANALYZE für ein UPDATE/DELETE/INSERT führt die Anweisung tatsächlich aus. Führen Sie sie in einer Transaktion mit ROLLBACK aus, wenn Sie sie untersuchen möchten, ohne sie zu bestätigen:
BEGIN;
EXPLAIN ANALYZE DELETE FROM orders WHERE ...;
ROLLBACK;Häufige Plan-Knoten
- Seq Scan – liest die gesamte Tabelle
- Index Scan – verwendet einen Index
- Bitmap Heap Scan – kombiniert mehrere Indizes
- Hash Join / Merge Join / Nested Loop – Strategien für Verknüpfungen
- Sort, Aggregate, Limit, Materialize
Arbeitsablauf zum Lesen von Plänen
- Führen Sie EXPLAIN ANALYZE für die langsame Abfrage aus
- Suchen Sie den Knoten mit dem höchsten
actual time - Vergleichen Sie die geschätzten
rowsmit denactual rows - Prüfen Sie, ob Indizes verwendet werden
- Iterieren Sie: Index hinzufügen / Abfrage umschreiben / ANALYZE
Zusammenfassung
EXPLAIN ANALYZE ist Ihr wichtigstes Werkzeug für die Performance-Analyse.
- Kosten sind relativ, Zeit ist real
- Der Vergleich von geschätzten und tatsächlichen Zeilen weist auf Statistikprobleme hin
- BUFFERS zeigt die I/O
- Umschließen Sie destruktive Abfragen mit BEGIN; ... ROLLBACK
Kurztest
Was ist der Unterschied zwischen EXPLAIN und EXPLAIN ANALYZE?
Häufig gestellte Fragen
Ist die Lektion „EXPLAIN und EXPLAIN ANALYZE lesen“ kostenlos?
Ja — der vollständige Text von „EXPLAIN und EXPLAIN ANALYZE lesen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „EXPLAIN und EXPLAIN ANALYZE lesen“?
Lesen Sie den Planbaum, verstehen Sie den Unterschied zwischen geschätzter und tatsächlicher Zeit und identifizieren Sie die aufwendigen Knoten. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um SQL Academy zu starten?
Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „EXPLAIN und EXPLAIN ANALYZE lesen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?
Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- EXPLAIN und EXPLAIN ANALYZE lesen
- Sequenzielle Scans vs. Index-Scans
- Hash Join vs. Merge Join vs. Nested Loop
- Langsame Abfragen erkennen und beheben