Teradata - Explique
O comando EXPLAIN retorna o plano de execução do mecanismo de análise em inglês. Ele pode ser usado com qualquer instrução SQL, exceto em outro comando EXPLAIN. Quando uma consulta é precedida do comando EXPLAIN, o plano de execução do mecanismo de análise é retornado ao usuário em vez de AMPs.
Exemplos de EXPLAIN
Considere a tabela Employee com a seguinte definição.
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 );
Alguns exemplos do plano EXPLAIN são fornecidos abaixo.
Varredura de mesa completa (FTS)
Quando nenhuma condição é especificada na instrução SELECT, o otimizador pode escolher usar a Varredura de Tabela Completa, onde cada linha da tabela é acessada.
Exemplo
A seguir está um exemplo de consulta em que o otimizador pode escolher FTS.
EXPLAIN SELECT * FROM employee;
Quando a consulta acima é executada, ela produz a seguinte saída. Como pode ser visto, o otimizador opta por acessar todos os AMPs e todas as linhas dentro do 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.
Índice Primário Único
Quando as linhas são acessadas usando o índice primário exclusivo, então é uma operação AMP.
EXPLAIN SELECT * FROM employee WHERE EmployeeNo = 101;
Quando a consulta acima é executada, ela produz a seguinte saída. Como pode ser visto, é uma recuperação de AMP único e o otimizador está usando o índice primário exclusivo para acessar a linha.
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.
Índice Secundário Único
Quando as linhas são acessadas usando o Índice secundário exclusivo, é uma operação de dois amp.
Exemplo
Considere a tabela Salário com a seguinte definição.
CREATE SET TABLE SALARY,FALLBACK (
EmployeeNo INTEGER,
Gross INTEGER,
Deduction INTEGER,
NetPay INTEGER
)
PRIMARY INDEX ( EmployeeNo )
UNIQUE INDEX (EmployeeNo);
Considere a seguinte instrução SELECT.
EXPLAIN SELECT * FROM Salary WHERE EmployeeNo = 101;
Quando a consulta acima é executada, ela produz a seguinte saída. Como pode ser visto, o otimizador recupera a linha em uma operação de dois amplificadores usando um índice secundário exclusivo.
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.
Termos Adicionais
A seguir está a lista de termos comumente vistos no plano EXPLAIN.
... (Last Use) …
Um arquivo de spool não é mais necessário e será lançado quando esta etapa for concluída.
... with no residual conditions …
Todas as condições aplicáveis foram aplicadas às linhas.
... END TRANSACTION …
Os bloqueios de transação são liberados e as alterações são confirmadas.
... eliminating duplicate rows ...
As linhas duplicadas existem apenas em arquivos de spool, não em tabelas definidas. Fazendo uma operação DISTINCT.
... by way of a traversal of index #n extracting row ids only …
Um arquivo de spool é construído contendo os IDs de linha encontrados em um índice secundário (índice #n)
... we do a SMS (set manipulation step) …
Combinação de linhas usando um operador UNION, MINUS ou INTERSECT.
... which is redistributed by hash code to all AMPs.
Redistribuindo dados em preparação para uma junção.
... which is duplicated on all AMPs.
Duplicar dados da tabela menor (em termos de SPOOL) na preparação para uma junção.
... (one_AMP) or (group_AMPs)
Indica que um AMP ou subconjunto de AMPs será usado em vez de todos os AMPs.