Teradata - Explica

El comando EXPLAIN devuelve el plan de ejecución del motor de análisis en inglés. Se puede utilizar con cualquier instrucción SQL excepto en otro comando EXPLAIN. Cuando una consulta va precedida del comando EXPLAIN, el plan de ejecución del motor de análisis se devuelve al usuario en lugar de los AMP.

Ejemplos de EXPLAIN

Considere la tabla Empleado con la siguiente definición.

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

A continuación se ofrecen algunos ejemplos del plan EXPLAIN.

Escaneo de tabla completa (FTS)

Cuando no se especifican condiciones en la instrucción SELECT, el optimizador puede optar por utilizar la exploración de tabla completa donde se accede a todas y cada una de las filas de la tabla.

Ejemplo

A continuación se muestra una consulta de muestra en la que el optimizador puede elegir FTS.

EXPLAIN SELECT * FROM employee;

Cuando se ejecuta la consulta anterior, produce el siguiente resultado. Como se puede ver, el optimizador elige acceder a todos los AMP y a todas las filas dentro del 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 primario único

Cuando se accede a las filas mediante el índice principal único, se trata de una operación de AMP.

EXPLAIN SELECT * FROM employee WHERE EmployeeNo = 101;

Cuando se ejecuta la consulta anterior, produce el siguiente resultado. Como puede verse, se trata de una recuperación de un solo AMP y el optimizador está utilizando el índice principal único para acceder a la fila.

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 secundario único

Cuando se accede a las filas mediante el índice secundario único, es una operación de dos amperios.

Ejemplo

Considere la tabla Salario con la siguiente definición.

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

Considere la siguiente declaración SELECT.

EXPLAIN SELECT * FROM Salary WHERE EmployeeNo = 101;

Cuando se ejecuta la consulta anterior, produce el siguiente resultado. Como puede verse, el optimizador recupera la fila en la operación de dos amperios utilizando un índice secundario único.

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.

Terminos adicionales

A continuación se muestra la lista de términos que se ven comúnmente en el plan EXPLAIN.

... (Last Use) …

Ya no se necesita un archivo de cola y se publicará cuando se complete este paso.

... with no residual conditions …

Se han aplicado todas las condiciones aplicables a las filas.

... END TRANSACTION …

Se liberan los bloqueos de transacciones y se confirman los cambios.

... eliminating duplicate rows ...

Las filas duplicadas solo existen en archivos de cola, no en tablas establecidas. Haciendo una operación DISTINTA.

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

Se crea un archivo de cola que contiene los ID de fila que se encuentran en un índice secundario (índice #n)

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

Combinar filas mediante un operador UNION, MINUS o INTERSECT.

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

Redistribuir datos en preparación para una combinación.

... which is duplicated on all AMPs.

Duplicar datos de la tabla más pequeña (en términos de SPOOL) en preparación para una combinación.

... (one_AMP) or (group_AMPs)

Indica que se utilizará un AMP o un subconjunto de AMP en lugar de todos los AMP.