Abfrageplaner und EXPLAIN
Kurz: Der Abfrageplaner wählt für eine SQL-Abfrage den schnellsten Ausführungsplan. Mit EXPLAIN siehst du, welchen Plan er wählt, und findest so langsame Stellen.
Genauer: SQL beschreibt, was man will, nicht wie. Der Planer schätzt anhand von Statistiken (Zeilenzahlen, Wertverteilung) die Kosten verschiedener Pläne, etwa Index- oder Vollscan, Join-Reihenfolge und Join-Verfahren, und nimmt den billigsten.
Im Detail
- EXPLAIN / EXPLAIN ANALYZE: Plan anzeigen bzw. wirklich ausführen und echte Zeiten messen.
- Scan-Arten: Seq Scan (alles lesen), Index Scan, Index Only Scan, Bitmap Scan.
- Join-Verfahren: Nested Loop (klein), Hash Join (groß, ungeordnet), Merge Join (sortiert).
- Statistiken: Veraltete Statistiken führen zu schlechten Plänen.
ANALYZEaktualisiert sie. - Häufige Ursachen langsamer Abfragen: Fehlender Index, Funktion auf der Spalte in
WHERE,SELECT *, N+1-Abfragen. - Selektivität: Ein Index lohnt sich vor allem, wenn wenige Zeilen getroffen werden.
Siehe auch: SQL-Index, B-Baum und B+-Baum