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.
EXPLAIN
Zeigt den Ausführungsplan für eine Abfrageanweisung an, ohne die Abfrage auszuführen. Informationen zum Arbeitsablauf für die Abfrageanalyse finden Sie unter Workflow zur Analyse von Abfragen.
Syntax
EXPLAIN [ VERBOSE ] query
Parameter
- VERBOSE
-
Zeigt den vollständigen Abfrageplan und nicht nur eine Zusammenfassung an.
- query
-
Die Abfrageanweisung, die erklärt werden soll. Bei der Abfrage kann es sich um eine SELECTINSERT, CREATE TABLE ASUPDATE, oder DELETE -Anweisung handeln.
Nutzungshinweise
EXPLAINDie Leistung wird manchmal durch die Zeit beeinflusst, die zum Erstellen temporärer Tabellen benötigt wird. Beispielsweise erfordert eine Abfrage, die die allgemeine Optimierung von Unterausdrücken verwendet, dass temporäre Tabellen erstellt und analysiert werden, um die EXPLAIN Ausgabe zurückzugeben. Der Abfrageplan ist vom Schema und der Statistik der temporären Tabellen abhängig. Daher kann die Ausführung des EXPLAIN Befehls für diesen Abfragetyp länger dauern als erwartet.
Sie können ihn EXPLAIN nur für die folgenden Befehle verwenden:
-
SELECT
-
SELECT INTO
-
CREATETABLEALS
-
INSERT
-
UPDATE
-
DELETE
Der EXPLAIN Befehl schlägt fehl, wenn Sie ihn für andere SQL Befehle verwenden, z. B. für Datendefinitionssprache (DDL) oder Datenbankoperationen.
Die relativen EXPLAIN Produktionsstückkosten werden von Amazon Redshift verwendet, um einen Abfrageplan auszuwählen. Amazon Redshift vergleicht die Größen verschiedener Ressourcenschätzungen, um den Plan zu ermitteln.
Abfrageplanung und Ausführungsschritte
Der Ausführungsplan für eine bestimmte Amazon-Redshift-Abfrageanweisung unterteilt Ausführung und Berechnung einer Abfrage in eine definierte Abfolge von Schritten und Tabellenoperationen, die schließlich einen endgültigen Ergebnissatz für die Abfrage zurückgeben. Informationen zur Abfrageplanung finden Sie unter Verarbeitung von Abfragen.
In der folgenden Tabelle wird eine Übersicht über die Schritte bereitgestellt, die Amazon Redshift für die Entwicklung eines Ausführungsplans für eine Abfrage verwenden kann, die von einem Benutzer zur Ausführung abgesendet wird.
EXPLAINBetreiber | Abfrageausführungsschritte | Beschreibung |
---|---|---|
SCAN: | ||
Sequenzieller Scan | scan | Amazon-Redshift-Beziehungs-Scan- oder Tabellen-Scan-Operator oder -Schritt. Scannt die gesamte Tabelle sequentiell von Anfang bis Ende; wertet auch Abfrageeinschränkungen für jede Zeile (Filter) aus, sofern diese mit einer WHERE Klausel angegeben sind. Wird auch zum Ausführen von INSERTUPDATE, und DELETE -Anweisungen verwendet. |
JOINS: Amazon Redshift verwendet verschiedene Join-Operatoren, die auf dem physischen Design der zu verknüpfenden Tabellen, dem Speicherort der für die Verknüpfung erforderlichen Daten und den spezifischen Attributen der Abfrage selbst basieren. Subquery Scan — Subquery Scan und Append werden verwendet, um Abfragen auszuführen. UNION | ||
Nested Loop | nloop | Dies ist der am wenigsten optimale Join; wird vor allem für Kreuz-Joins (kartesische Produkte; ohne Join-Bedingung) und einige Ungleichheits-Joins verwendet. |
Hash Join | hjoin | Wird auch für interne Joins sowie externe Joins nach links und rechts verwendet und in der Regel schneller ausgeführt als ein Join über eine verschachtelte Schleife. Hash-Joins lesen die externe Tabelle, führen einen Hash-Vorgang für die angeschlossene Spalte aus und suchen Übereinstimmungen in der internen Hash-Tabelle. Dieser Schritt kann auf die Festplatte übergreifen. (Der interne Input von hjoin ist ein Hash-Schritt, der festplattenbasiert sein kann.) |
Merge Join | mjoin | Wird auch für interne und externe Joins verwendet (für Join-Tabellen, die anhand der Join-Spalten verteilt und sortiert werden). In der Regel ist dies der schnellste Join-Algorithmus von Amazon Redshift ohne Berücksichtigung anderer Kostenüberlegungen. |
AGGREGATION: Operatoren und Schritte, die für Abfragen verwendet werden, die Aggregatfunktionen und GROUP BY-Operationen beinhalten. | ||
Aggregate | aggr | Operator/Schritt für skalare Zusammenfassungsfunktionen. |
HashAggregate | aggr | Operator/Schritt für gruppierte Zusammenfassungsfunktionen. Kann über die Festplatte ausgeführt werden, wenn die Hash-Tabelle auf die Festplatte übergreift. |
GroupAggregate | aggr | Ein Operator, der manchmal für gruppierte Zusammenfassungsabfragen gewählt wird, wenn die Amazon-Redshift-Konfigurationseinstellung für die Einstellung force_hash_grouping nicht aktiviert ist. |
SORT: Operatoren und Schritte, die verwendet werden, wenn Abfragen Ergebnismengen sortieren oder zusammenführen müssen. | ||
Sortierung | sort | Sort führt die in der BY-Klausel ORDER angegebene Sortierung sowie andere Operationen wie UNIONs Und-Joins durch. Kann von der Festplatte aus ausgeführt werden. |
Merge | merge | Erstellt die abschließenden sortierten Ergebnisse einer Abfrage auf der Basis zwischenzeitlicher sortierter Ergebnisse, die von parallel ausgeführten Operationen abgeleitet werden. |
EXCEPTINTERSECT, und UNION Operationen: | ||
SetOp Außer [Distinct] | hjoin | Wird für EXCEPT Abfragen verwendet. Kann über die Festplatte ausgeführt werden, da der Eingabe-Hash festplattenbasiert sein kann. |
Hash Intersect [Distinct] | hjoin | Wird für INTERSECT Abfragen verwendet. Kann über die Festplatte ausgeführt werden, da der Eingabe-Hash festplattenbasiert sein kann. |
Append [All |Distinct] | save | Append wird zusammen mit Subquery Scan zur Implementierung UNION von Abfragen verwendet. UNION ALL Kann aufgrund von „save“ über die Festplatte ausgeführt werden. |
Verschiedenes/Sonstiges: | ||
Hash | hash | Wird für interne Joins sowie externe Joins nach links und rechts verwendet (stellt Eingaben für einen Hash-Join bereit). Der Hash-Operator erstellt die Hash-Tabelle für die interne Tabelle eines Join. (Die interne Tabelle ist die Tabelle, die auf Übereinstimmungen überprüft wird und im Fall eines Join zweier Tabellen in der Regel die kleinere der beiden Tabellen ist.) |
Limit | limit | Wertet die Klausel aus. LIMIT |
Materialize | save | Setzt Zeilen für die Eingabe für Joins mit verschachtelten Schleifen und einige Zusammenführungs-Joins um. Kann von der Festplatte aus ausgeführt werden. |
-- | parse | Wird verwendet, um während des Ladens Eingabedaten in Textform zu analysieren. |
-- | project | Wird verwendet, um Spalten und Datenverarbeitungsausdrücke, d. h. Projektdaten, neu anzuordnen. |
Ergebnis | -- | Führt skalare Funktionen aus, für die kein Tabellenzugriff erforderlich ist. |
-- | return | Gibt Zeilen an den Leader oder Client zurück. |
Subplan | -- | Wird für bestimmte Unterabfragen verwendet. |
Unique | eindeutig | Eliminiert Duplikate von SELECT DISTINCT und UNION Abfragen. |
Window | window | Datenverarbeitung für Aggregation und Einstufung von Fensterfunktionen. Kann von der Festplatte aus ausgeführt werden. |
Netzwerkoperationen: | ||
Network (Broadcast) | bcast | Broadcast ist auch ein Attribut von Join Explain-Operatoren und -Schritten. |
Network (Distribute) | dist | Verteilung von Zeilen an Datenverarbeitungsknoten für die parallele Verarbeitung durch ein Data Warehouse-Cluster. |
Network (Send to Leader) | return | Sendet die Ergebnisse zur weiteren Verarbeitung an den Leader zurück. |
DMLOperationen (Operatoren, die Daten ändern): | ||
Insert (unter Verwendung des Ergebnisses) | insert | Fügt Daten ein. |
Delete (Scan + Filter) | delete | Löscht Daten. Kann von der Festplatte aus ausgeführt werden. |
Update (Scan + Filter) | delete, insert | Wird als Lösch- und Einfügevorgang implementiert. |
Verwenden EXPLAIN für RLS
Wenn eine Abfrage eine Tabelle enthält, die Sicherheitsrichtlinien (RLS) auf Zeilenebene unterliegt, EXPLAIN wird ein spezieller RLS SecureScan Knoten angezeigt. Amazon Redshift protokolliert denselben Knotentyp auch in der EXPLAIN Systemtabelle STL _. EXPLAINenthüllt nicht das RLS Prädikat, das für dim_tbl gilt. Der RLS SecureScan Knotentyp dient als Indikator dafür, dass der Ausführungsplan zusätzliche Operationen enthält, die für den aktuellen Benutzer unsichtbar sind.
Das folgende Beispiel zeigt einen RLS SecureScan Knoten.
EXPLAIN SELECT D.cint FROM fact_tbl F INNER JOIN dim_tbl D ON F.k_dim = D.k WHERE F.k_dim / 10 > 0; QUERY PLAN ------------------------------------------------------------------------ XN Hash Join DS_DIST_ALL_NONE (cost=0.08..0.25 rows=1 width=4) Hash Cond: ("outer".k_dim = "inner"."k") -> *XN* *RLS SecureScan f (cost=0.00..0.14 rows=2 width=4)* Filter: ((k_dim / 10) > 0) -> XN Hash (cost=0.07..0.07 rows=2 width=8) -> XN Seq Scan on dim_tbl d (cost=0.00..0.07 rows=2 width=8) Filter: (("k" / 10) > 0)
Um eine vollständige Untersuchung der Abfragepläne zu ermöglichen, die unterliegenRLS, bietet Amazon Redshift die EXPLAIN RLS Systemberechtigungen. Benutzer, denen diese Berechtigung erteilt wurde, können vollständige Abfragepläne einsehen, die auch RLS Prädikate enthalten.
Das folgende Beispiel zeigt, dass ein zusätzlicher Seq-Scan unterhalb des RLS SecureScan Knotens auch das RLS Policy-Prädikat (k_dim > 1) beinhaltet.
EXPLAIN SELECT D.cint FROM fact_tbl F INNER JOIN dim_tbl D ON F.k_dim = D.k WHERE F.k_dim / 10 > 0; QUERY PLAN --------------------------------------------------------------------------------- XN Hash Join DS_DIST_ALL_NONE (cost=0.08..0.25 rows=1 width=4) Hash Cond: ("outer".k_dim = "inner"."k") *-> XN RLS SecureScan f (cost=0.00..0.14 rows=2 width=4) Filter: ((k_dim / 10) > 0)* -> *XN* *Seq Scan on fact_tbl rls_table (cost=0.00..0.06 rows=5 width=8) Filter: (k_dim > 1)* -> XN Hash (cost=0.07..0.07 rows=2 width=8) -> XN Seq Scan on dim_tbl d (cost=0.00..0.07 rows=2 width=8) Filter: (("k" / 10) > 0)
Während die EXPLAIN RLS Berechtigung einem Benutzer erteilt wird, protokolliert Amazon Redshift den vollständigen Abfrageplan einschließlich RLS Prädikaten in der Systemtabelle STL _EXPLAIN. Abfragen, die ausgeführt werden, während diese Berechtigung nicht erteilt wurde, werden ohne interne Daten protokolliert. RLS Durch das Erteilen oder Entfernen der EXPLAIN RLS Berechtigung wird nichts daran geändert, was Amazon Redshift bei STL _ EXPLAIN für frühere Abfragen protokolliert hat.
AWS Lake Formation- RLS geschützte Redshift-Beziehungen
Das folgende Beispiel zeigt einen SecureScan LF-Knoten, mit dem Sie die RLS Beziehungen zwischen Lake Formation und Lake anzeigen können.
EXPLAIN SELECT * FROM lf_db.public.t_share WHERE a > 1; QUERY PLAN --------------------------------------------------------------- XN LF SecureScan t_share (cost=0.00..0.02 rows=2 width=11) (2 rows)
Beispiele
Anmerkung
Für diese Beispiele kann sich die Beispielausgabe abhängig von der Amazon-Redshift-Konfiguration unterscheiden.
Im folgenden Beispiel wird der Abfrageplan für eine Abfrage zurückgegeben, bei der dieEVENTID, EVENTNAMEVENUEID, und VENUENAME aus den VENUE Tabellen EVENT und ausgewählt werden:
explain select eventid, eventname, event.venueid, venuename from event, venue where event.venueid = venue.venueid;
QUERY PLAN -------------------------------------------------------------------------- XN Hash Join DS_DIST_OUTER (cost=2.52..58653620.93 rows=8712 width=43) Hash Cond: ("outer".venueid = "inner".venueid) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=23) -> XN Hash (cost=2.02..2.02 rows=202 width=22) -> XN Seq Scan on venue (cost=0.00..2.02 rows=202 width=22) (5 rows)
Im folgenden Beispiel wird der Abfrageplan für dieselbe Abfrage mit Verbose-Ausgabe zurückgegeben:
explain verbose select eventid, eventname, event.venueid, venuename from event, venue where event.venueid = venue.venueid;
QUERY PLAN -------------------------------------------------------------------------- {HASHJOIN :startup_cost 2.52 :total_cost 58653620.93 :plan_rows 8712 :plan_width 43 :best_pathkeys <> :dist_info DS_DIST_OUTER :dist_info.dist_keys ( TARGETENTRY { VAR :varno 2 :varattno 1 ... XN Hash Join DS_DIST_OUTER (cost=2.52..58653620.93 rows=8712 width=43) Hash Cond: ("outer".venueid = "inner".venueid) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=23) -> XN Hash (cost=2.02..2.02 rows=202 width=22) -> XN Seq Scan on venue (cost=0.00..2.02 rows=202 width=22) (519 rows)
Im folgenden Beispiel wird der Abfrageplan für eine CREATE TABLE AS (CTAS) -Anweisung zurückgegeben:
explain create table venue_nonulls as select * from venue where venueseats is not null; QUERY PLAN ----------------------------------------------------------- XN Seq Scan on venue (cost=0.00..2.02 rows=187 width=45) Filter: (venueseats IS NOT NULL) (2 rows)