PostgreSQL Execution Plan – Leitfaden
Der PostgreSQL Execution Plan, auf Deutsch Ausführungsplan, zeigt,
wie PostgreSQL eine SQL-Abfrage intern ausführt.
Die Analyse eines Execution Plans zeigt unter anderem:
- welche Tabellen gelesen werden
- welche Indizes verwendet werden
- welche Join-Methoden eingesetzt werden
- ob Daten sortiert oder aggregiert werden
- welche Operationen den größten Aufwand verursachen
Execution Plan anzeigen
Mit pgAdmin
- SQL-Abfrage im Query Tool öffnen.
- Auf Explain klicken.
- Optional unter Explain Settings die Option Costs aktivieren.
- Den erzeugten Execution Plan analysieren.
Access Methods – Zugriffsmethoden
Access Methods beschreiben, wie PostgreSQL Daten aus einer Tabelle
oder einem Index liest.
| Zugriffsmethode | Beschreibung | Wann wird sie verwendet? |
|---|---|---|
| Seq Scan | Liest jede Zeile einer Tabelle. Dies entspricht einem vollständigen Table Scan und kann bei großen Tabellen eine aufwendige Operation sein. |
Wenn kein geeigneter Index vorhanden ist. |
| Index Scan | Durchsucht einen B-Tree-Index nach passenden Einträgen und liest anschließend die zugehörigen Datensätze aus der Tabelle. |
Wenn ein geeigneter Index existiert und verwendet werden kann. |
| Index Only Scan | Liest die benötigten Daten direkt aus dem Index. Ein zusätzlicher Zugriff auf die Tabelle ist nicht erforderlich. |
Wenn alle benötigten Spalten im Index enthalten sind. |
Join Operations
Join-Operationen kombinieren zwei Ergebnismengen zu einem gemeinsamen Resultat.
| Join-Methode | Beschreibung | Typischer Einsatz |
|---|---|---|
| Nested Loop | Jede Zeile einer Ergebnismenge wird mit den passenden Zeilen der anderen Ergebnismenge verglichen. |
Laut Vorlage bei großen Datenmengen oder wenn eine Tabelle deutlich größer als die andere ist. |
| Hash Join | Verbindet zwei Ergebnismengen mithilfe einer Hash-Struktur im Arbeitsspeicher. | Laut Vorlage bei kleineren Datenmengen oder wenn die Ergebnisse in den Arbeitsspeicher passen. |
| Merge Join | Vergleicht zwei sortierte Ergebnismengen und führt sie zu einem gemeinsamen Ergebnis zusammen. |
Wenn die Spalten der beiden Ergebnismengen über Indizes verfügen. |
Sort Operations
Sortieroperationen werden verwendet, um Ergebnismengen zu sortieren,
zu gruppieren oder weiterzuverarbeiten.
| Operation | Beschreibung | Wann wird sie verwendet? |
|---|---|---|
| Sort | Sortiert Datensätze anhand der angegebenen Spalten. | Bei Verwendung einer ORDER BY-Klausel. |
| GroupAggregate | Aggregiert Daten entsprechend einer GROUP BY-Klausel. |
Bei GROUP BY in Verbindung mit Aggregatfunktionen. |
| HashAggregate | Aggregiert Daten mithilfe einer temporären Hash-Tabelle im Arbeitsspeicher. | Bei GROUP BY in Verbindung mit Aggregatfunktionen. |
Zusammenfassung
Access Methods
- Seq Scan
- Index Scan
- Index Only Scan
Join Operations
- Nested Loop
- Hash Join
- Merge Join
Sort Operations
- Sort
- GroupAggregate
- HashAggregate
Ziel der Analyse
Beim Lesen eines Execution Plans sollte insbesondere geprüft werden:
- Werden Indizes verwendet?
- Gibt es Sequential Scans?
- Welche Join-Methode wurde gewählt?
- Müssen große Datenmengen sortiert werden?
- Wie werden Gruppierungen und Aggregationen ausgeführt?
- Welche Operation weist die höchsten geschätzten Kosten auf?
Fazit
Das Verständnis eines PostgreSQL Execution Plans ist eine wichtige
Grundlage für die Analyse und Optimierung von SQL-Abfragen.
Zugriffsmethoden, Join-Strategien und Sortieroperationen zeigen,
wie PostgreSQL eine Abfrage verarbeitet.