Teradata - Erklären Sie

Der Befehl EXPLAIN gibt den Ausführungsplan der Parsing-Engine in englischer Sprache zurück. Es kann mit jeder SQL-Anweisung verwendet werden, außer mit einem anderen EXPLAIN-Befehl. Wenn einer Abfrage der Befehl EXPLAIN vorangestellt wird, wird der Ausführungsplan der Parsing Engine anstelle von AMPs an den Benutzer zurückgegeben.

Beispiele für EXPLAIN

Betrachten Sie die Tabelle Mitarbeiter mit der folgenden Definition.

CREATE SET TABLE EMPLOYEE,FALLBACK ( 
   EmployeeNo INTEGER, 
   FirstName VARCHAR(30), 
   LastName VARCHAR(30),
   DOB DATE FORMAT 'YYYY-MM-DD', 
   JoinedDate DATE FORMAT 'YYYY-MM-DD', 
   DepartmentNo BYTEINT 
) 
UNIQUE PRIMARY INDEX ( EmployeeNo );

Einige Beispiele für den EXPLAIN-Plan sind unten angegeben.

Full Table Scan (FTS)

Wenn in der SELECT-Anweisung keine Bedingungen angegeben sind, kann der Optimierer die vollständige Tabellensuche verwenden, bei der auf jede einzelne Zeile der Tabelle zugegriffen wird.

Beispiel

Es folgt eine Beispielabfrage, bei der der Optimierer FTS auswählen kann.

EXPLAIN SELECT * FROM employee;

Wenn die obige Abfrage ausgeführt wird, wird die folgende Ausgabe erzeugt. Wie zu sehen ist, wählt der Optimierer den Zugriff auf alle AMPs und alle Zeilen innerhalb des AMP.

1) First, we lock a distinct TDUSER."pseudo table" for read on a 
   RowHash to prevent global deadlock for TDUSER.employee.  
2) Next, we lock TDUSER.employee for read.  
3) We do an all-AMPs RETRIEVE step from TDUSER.employee by way of an
   all-rows scan with no residual conditions into Spool 1 
   (group_amps), which is built locally on the AMPs.  The size of 
   Spool 1 is estimated with low confidence to be 2 rows (116 bytes).  
   The estimated time for this step is 0.03 seconds.  
4) Finally, we send out an END TRANSACTION step to all AMPs involved 
   in processing the request. 
→ The contents of Spool 1 are sent back to the user as the result of 
   statement 1.  The total estimated time is 0.03 seconds.

Eindeutiger Primärindex

Wenn auf die Zeilen mit dem eindeutigen Primärindex zugegriffen wird, handelt es sich um eine AMP-Operation.

EXPLAIN SELECT * FROM employee WHERE EmployeeNo = 101;

Wenn die obige Abfrage ausgeführt wird, wird die folgende Ausgabe erzeugt. Wie zu sehen ist, handelt es sich um einen Einzel-AMP-Abruf, und der Optimierer verwendet den eindeutigen Primärindex, um auf die Zeile zuzugreifen.

1) First, we do a single-AMP RETRIEVE step from TDUSER.employee by 
   way of the unique primary index "TDUSER.employee.EmployeeNo = 101" 
   with no residual conditions. The estimated time for this step is 
   0.01 seconds.  
→ The row is sent directly back to the user as the result of 
   statement 1.  The total estimated time is 0.01 seconds.

Einzigartiger Sekundärindex

Wenn auf die Zeilen mit dem eindeutigen Sekundärindex zugegriffen wird, handelt es sich um eine Zwei-Ampere-Operation.

Beispiel

Betrachten Sie die Tabelle Gehalt mit der folgenden Definition.

CREATE SET TABLE SALARY,FALLBACK ( 
   EmployeeNo INTEGER, 
   Gross INTEGER, 
   Deduction INTEGER, 
   NetPay INTEGER 
)
PRIMARY INDEX ( EmployeeNo ) 
UNIQUE INDEX (EmployeeNo);

Betrachten Sie die folgende SELECT-Anweisung.

EXPLAIN SELECT * FROM Salary WHERE EmployeeNo = 101;

Wenn die obige Abfrage ausgeführt wird, wird die folgende Ausgabe erzeugt. Wie zu sehen ist, ruft der Optimierer die Zeile im Zwei-Ampere-Betrieb unter Verwendung eines eindeutigen Sekundärindex ab.

1) First, we do a two-AMP RETRIEVE step from TDUSER.Salary 
   by way of unique index # 4 "TDUSER.Salary.EmployeeNo = 
   101" with no residual conditions.  The estimated time for this 
   step is 0.01 seconds.  
→ The row is sent directly back to the user as the result of 
   statement 1.  The total estimated time is 0.01 seconds.

Zusätzliche Bedingungen

Im Folgenden finden Sie eine Liste der Begriffe, die im EXPLAIN-Plan häufig vorkommen.

... (Last Use) …

Eine Spooldatei wird nicht mehr benötigt und wird freigegeben, wenn dieser Schritt abgeschlossen ist.

... with no residual conditions …

Alle anwendbaren Bedingungen wurden auf die Zeilen angewendet.

... END TRANSACTION …

Transaktionssperren werden freigegeben und Änderungen werden festgeschrieben.

... eliminating duplicate rows ...

Doppelte Zeilen existieren nur in Spooldateien, keine festgelegten Tabellen. Eine DISTINCT-Operation ausführen.

... by way of a traversal of index #n extracting row ids only …

Es wird eine Spooldatei erstellt, die die in einem Sekundärindex (Index #n) gefundenen Zeilen-IDs enthält.

... we do a SMS (set manipulation step) …

Kombinieren von Zeilen mit einem UNION-, MINUS- oder INTERSECT-Operator.

... which is redistributed by hash code to all AMPs.

Neuverteilung von Daten zur Vorbereitung eines Joins.

... which is duplicated on all AMPs.

Duplizieren von Daten aus der kleineren Tabelle (in Bezug auf SPOOL) zur Vorbereitung eines Joins.

... (one_AMP) or (group_AMPs)

Gibt an, dass anstelle aller AMPs ein AMP oder eine Teilmenge von AMPs verwendet wird.