Teradata - wyjaśnij

Polecenie EXPLAIN zwraca plan wykonania silnika parsującego w języku angielskim. Można go używać z dowolną instrukcją SQL z wyjątkiem innego polecenia EXPLAIN. Gdy zapytanie jest poprzedzone poleceniem EXPLAIN, plan wykonania mechanizmu parsującego jest zwracany do użytkownika zamiast AMP.

Przykłady EXPLAIN

Rozważmy tabelę Pracownik z następującą definicją.

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 );

Poniżej podano kilka przykładów planu EXPLAIN.

Pełne skanowanie tabeli (FTS)

Jeśli w instrukcji SELECT nie określono żadnych warunków, optymalizator może zdecydować się na użycie pełnego skanowania tabeli, w którym uzyskiwany jest dostęp do każdego wiersza tabeli.

Przykład

Poniżej znajduje się przykładowe zapytanie, w którym optymalizator może wybrać FTS.

EXPLAIN SELECT * FROM employee;

Kiedy powyższe zapytanie jest wykonywane, generuje następujące dane wyjściowe. Jak widać, optymalizator wybiera dostęp do wszystkich stron AMP i wszystkich wierszy w 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.

Unikalny indeks podstawowy

Gdy dostęp do wierszy uzyskuje się za pomocą unikalnego indeksu podstawowego, jest to jedna operacja AMP.

EXPLAIN SELECT * FROM employee WHERE EmployeeNo = 101;

Kiedy powyższe zapytanie jest wykonywane, generuje następujące dane wyjściowe. Jak widać, jest to pobieranie pojedynczego AMP, a optymalizator używa unikalnego indeksu podstawowego, aby uzyskać dostęp do wiersza.

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.

Unikalny indeks pomocniczy

Gdy dostęp do rzędów uzyskuje się za pomocą Unique Secondary Index, jest to operacja z dwoma amperami.

Przykład

Rozważ tabelę Wynagrodzenie z następującą definicją.

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

Rozważ następującą instrukcję SELECT.

EXPLAIN SELECT * FROM Salary WHERE EmployeeNo = 101;

Kiedy powyższe zapytanie jest wykonywane, generuje następujące dane wyjściowe. Jak widać, optymalizator pobiera wiersz w trybie pracy z dwoma amperami przy użyciu unikalnego indeksu dodatkowego.

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.

Dodatkowe warunki

Poniżej znajduje się lista terminów często występujących w planie EXPLAIN.

... (Last Use) …

Zbiór buforowy nie jest już potrzebny i zostanie zwolniony po zakończeniu tego kroku.

... with no residual conditions …

Wszystkie obowiązujące warunki zostały zastosowane do wierszy.

... END TRANSACTION …

Blokady transakcji są zwalniane, a zmiany są zatwierdzane.

... eliminating duplicate rows ...

Zduplikowane wiersze istnieją tylko w plikach buforowania, a nie w tabelach zestawów. Wykonywanie operacji DISTINCT.

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

Tworzony jest zbiór buforowy zawierający identyfikatory wierszy znalezione w indeksie dodatkowym (indeks nr n)

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

Łączenie wierszy za pomocą operatora UNION, MINUS lub INTERSECT.

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

Redystrybucja danych w ramach przygotowań do łączenia.

... which is duplicated on all AMPs.

Powielanie danych z mniejszej tabeli (pod względem SPOOL) w ramach przygotowań do łączenia.

... (one_AMP) or (group_AMPs)

Wskazuje, że zamiast wszystkich stron AMP zostanie użyty jeden AMP lub podzbiór stron AMP.