SQL EXPLAIN ist ein Diagnose-Befehl, der den Ausführungsplan einer Abfrage zeigt – also den Weg, den der Query-Optimizer für eine SELECT-Anweisung gewählt hat. Statt der Ergebniszeilen liefert EXPLAIN eine Plan-Beschreibung mit Schritten, geschätzten Kosten und verwendeten Indizes. Damit findet man langsame Abfragen, fehlende Indizes oder ungünstige Join-Reihenfolgen.

EXPLAIN in PostgreSQL

Die Grundform zeigt den Plan ohne die Abfrage auszuführen:

EXPLAIN SELECT * FROM kunden WHERE nachname = 'Müller';

Mit ANALYZE wird die Anweisung tatsächlich ausgeführt; zusätzlich zu den geschätzten Kosten erscheinen reale Laufzeiten und tatsächlich verarbeitete Zeilen:

EXPLAIN ANALYZE SELECT * FROM kunden WHERE nachname = 'Müller';

Wichtige Optionen sind VERBOSE (zusätzliche Details), COSTS OFF (nur der Algorithmus) und FORMAT JSON (maschinenlesbare Ausgabe). Der Plan besteht aus Knoten wie Seq Scan (komplette Tabelle lesen), Index Scan (über einen Index zugreifen), Nested Loop, Hash Join oder Merge Join. Ein Index Scan ist meist günstiger als ein Seq Scan – fehlt der Index, deutet das direkt auf eine Optimierungsmöglichkeit hin.

EXPLAIN in MySQL und MariaDB

MySQL kennt die Kurzform EXPLAIN SELECT ... und seit Version 8.0.18 auch EXPLAIN ANALYZE, das die Abfrage ausführt und echte Statistiken liefert. Mit EXPLAIN FORMAT=TREE oder FORMAT=JSON erhält man strukturierte Ausgaben. Die wichtigste Spalte ist type: von ALL (Full Table Scan) über range bis ref oder const – desto besser. Die Spalte key zeigt, welcher Index verwendet wird.

Typische Analyse-Schritte

  • Langsame Abfrage mit EXPLAIN ANALYZE ausführen und den teuersten Knoten finden.
  • Prüfen, ob ein Seq Scan ohne guten Grund auftritt – dann fehlt meist ein Index (siehe SQL INDEX).
  • Geschätzte gegen tatsächliche Zeilenzahlen vergleichen: Große Abweichungen deuten auf veraltete Statistiken hin – Abhilfe schafft SQL ANALYZE.

Verwandte Grundlagen: Ausführungsplan (Konzept), Query-Optimierung, SQL-Grundlagen, SQL WHERE.