Teradata - Spiega
Il comando EXPLAIN restituisce il piano di esecuzione del motore di analisi in inglese. Può essere utilizzato con qualsiasi istruzione SQL tranne su un altro comando EXPLAIN. Quando una query è preceduta dal comando EXPLAIN, il piano di esecuzione del motore di analisi viene restituito all'utente anziché AMP.
Esempi di EXPLAIN
Considera la tabella Employee con la seguente definizione.
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 );
Di seguito vengono forniti alcuni esempi di piano EXPLAIN.
Scansione tabella completa (FTS)
Quando nessuna condizione è specificata nell'istruzione SELECT, l'ottimizzatore può scegliere di utilizzare la scansione completa della tabella in cui si accede a ciascuna riga della tabella.
Esempio
Di seguito è una query di esempio in cui l'ottimizzatore può scegliere FTS.
EXPLAIN SELECT * FROM employee;
Quando la query precedente viene eseguita, produce il seguente output. Come si può vedere, l'ottimizzatore sceglie di accedere a tutti gli AMP e a tutte le righe all'interno dell'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.
Indice primario univoco
Quando si accede alle righe utilizzando l'indice primario univoco, si tratta di un'operazione AMP.
EXPLAIN SELECT * FROM employee WHERE EmployeeNo = 101;
Quando la query precedente viene eseguita, produce il seguente output. Come si può vedere, è un recupero di un singolo AMP e l'ottimizzatore utilizza l'indice primario univoco per accedere alla riga.
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.
Indice secondario univoco
Quando si accede alle righe utilizzando l'indice secondario univoco, è un'operazione a due amp.
Esempio
Considera la tabella Salario con la seguente definizione.
CREATE SET TABLE SALARY,FALLBACK (
EmployeeNo INTEGER,
Gross INTEGER,
Deduction INTEGER,
NetPay INTEGER
)
PRIMARY INDEX ( EmployeeNo )
UNIQUE INDEX (EmployeeNo);
Considera la seguente istruzione SELECT.
EXPLAIN SELECT * FROM Salary WHERE EmployeeNo = 101;
Quando la query precedente viene eseguita, produce il seguente output. Come si può vedere, l'ottimizzatore recupera la riga in un'operazione a due amplificatori utilizzando un indice secondario univoco.
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.
Termini aggiuntivi
Di seguito è riportato l'elenco dei termini comunemente visualizzati nel piano EXPLAIN.
... (Last Use) …
Un file di spool non è più necessario e verrà rilasciato al termine di questo passaggio.
... with no residual conditions …
Tutte le condizioni applicabili sono state applicate alle righe.
... END TRANSACTION …
I blocchi delle transazioni vengono rilasciati e le modifiche vengono salvate.
... eliminating duplicate rows ...
Le righe duplicate esistono solo nei file di spool, non nelle tabelle impostate. Esecuzione di un'operazione DISTINCT.
... by way of a traversal of index #n extracting row ids only …
Viene creato un file di spool contenente gli ID riga trovati in un indice secondario (indice #n)
... we do a SMS (set manipulation step) …
Combinazione di righe utilizzando un operatore UNION, MINUS o INTERSECT.
... which is redistributed by hash code to all AMPs.
Ridistribuzione dei dati in preparazione per un join.
... which is duplicated on all AMPs.
Duplicazione dei dati dalla tabella più piccola (in termini di SPOOL) in preparazione per un join.
... (one_AMP) or (group_AMPs)
Indica che verrà utilizzato un AMP o un sottoinsieme di AMP invece di tutti gli AMP.