Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Der EXPLAIN-Abfrageplan
PostgreSQL bietet die EXPLAIN ANALYZE
Optionen EXPLAIN
und für die Rückgabe von Abfrageplänen mit Details darüber, wie die Abfrage ausgeführt wird.
Die EXPLAIN-Anweisung
Die EXPLAIN
Anweisung gibt den Abfrageplan zurück, den der PostgreSQL-Planer für eine bestimmte Anweisung generiert. Der Abfrageplan zeigt Folgendes:
-
Wie die an einer Anweisung beteiligten Tabellen gescannt werden (z. B. mit einem Indexscan oder einem sequentiellen Scan)
-
Wie mehrere Tabellen verknüpft werden (z. B. Hash Join, Merge Join oder Nested Loop Join)
Das Verständnis des Plans ist entscheidend, um die Leistung der Abfrage zu verbessern. Sobald Sie den Plan verstanden haben, können Sie sich darauf konzentrieren, wo die Abfrage zu lange dauert, und Maßnahmen ergreifen, um den Zeitaufwand zu reduzieren.
Verwenden von EXPLAIN ANALYZE
Generiert in PostgreSQL nur einen Plan für die angegebene Anweisung. EXPLAIN
Wenn Sie das ANALYZE
Schlüsselwort hinzufügen, EXPLAIN
wird der Plan zurückgegeben, die Abfrage ausgeführt und die tatsächliche Laufzeit und die Zeilenanzahl für jeden Schritt angezeigt. Dies ist für die Analyse der Abfrageleistung unverzichtbar.
Wichtig
Seien Sie EXPLAIN ANALYZE
bei der Verwendung vorsichtig mit INSERT
UPDATE
, undDELETE
.
Wie liest man den EXPLAIN-Abfrageplan
Ein PostgreSQL-Abfrageplan ist eine Baumstruktur, die aus mehreren Knoten besteht. Der EXPLAIN
Abfrageplan zeigt die Schritte, die die Datenbank-Engine verwendet, um eine Abfrage auszuführen. Der Abfrageplan enthält die folgenden Informationen:
-
Die Art der ausgeführten Operationen, z. B. sequentielle Scans, Indexscans oder Nested-Loop-Joins.
-
Eine Bezeichnung, z. B.
Seq Scan
, oderIndex Scan
Nested Loop
, zur Beschreibung des ausgeführten Vorgangs. -
Der Name der Tabelle oder des Indexes, der von der Abfrage verarbeitet wird.
-
Kosten- und Zeilenspalten mit Informationen zu den geschätzten Kosten in einer beliebigen Berechnungseinheit und zur Anzahl der verarbeiteten Zeilen.
-
Die Filterbedingung aller Filter, die auf den Vorgang angewendet wurden, z. B. die
where
Bedingung. -
Eine visuelle Darstellung der Schritte, wobei jede Operation als Knoten dargestellt wird und Pfeile die Operationen miteinander verbinden. Die Reihenfolge der Operationen wird von links nach rechts angezeigt, wobei frühere Operationen in spätere Operationen einfließen.
Der folgende Screenshot zeigt den Abfrageplan für einen sequentiellen Scan.
Die Kostenschätzung (cost=0.00..32.60 rows=2260 width=8)
bedeutet, dass PostgreSQL davon ausgeht, dass die Abfrage 32,60 Recheneinheiten benötigt, um Ergebnisse zurückzugeben.
Der 0.00
Wert gibt die Kosten an, zu denen dieser Knoten seine Arbeit aufnehmen kann (in diesem Fall die Startzeit der Abfrage). Der rows
Wert ist die geschätzte Anzahl von Zeilen, die der sequentielle Scan zurückgeben wird. Der width
Wert ist die geschätzte Größe der zurückgegebenen Zeilen in Byte.
Da das Beispiel zeigtEXPLAIN
, dass die ANALYZE
Option verwendet wurde, wurde die Abfrage ausgeführt und die Zeitinformationen wurden erfasst. Das Ergebnis (actual
time=0.120..0.121 rows=1 loops=1)
bedeutet Folgendes:
-
Der sequentielle Scan wurde einmal ausgeführt (der
loops
Wert). -
Der Scan hat eine Zeile zurückgegeben.
-
Die tatsächliche Zeit betrug 0,12 Millisekunden.