Der EXPLAIN-Abfrageplan - AWS Präskriptive Leitlinien

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 INSERTUPDATE, 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, oder Index ScanNested 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.

Der Abfrageplan wird auf der Registerkarte Datenausgabe in pgAdmin angezeigt.

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.