A continuación se expone una breve referencia de las operaciones más comunes del plan de ejecución en la base de datos. Se puede encontrar la lista completa en la documentación de IBM.
Acceso a tabla e índice
- IXSCAN
IXSCAN
realiza el recorrido del B-tree y sigue la cadena del nodo hoja para encontrar todas las entradas que coincidan. Ver también el Capítulo 1, “Anatomía de un índice SQL”.El llamado predicados de filtro sobre índice (predicados "
SARG
" ) generalmente causa problemas de rendimiento paraIXSCAN
. La siguiente sección explica cómo identificarlos. Se parece a las operacionesINDEX ... SCAN
de Oracle.La ausencia de los predicados
START
ySTOP
indica un escaneo entero del índice.La vista
last_explained
se refiere a un escaneo inverso dentro de los paréntesis (por ejemplo,IXSCAN (REVERSE)
).- FETCH
Devuelve una fila desde la tabla usando el
RID
recuperado desde la búsqueda LOOKUP anterior sobre el índice. Ver también el Capítulo 1, “Anatomía de un índice SQL”. Parecido a la operaciónTABLE ACCESS BY INDEX ROWID
de Oracle.- TBSCAN
Es también conocido como escaneo entero de la tabla. Lee la tabla entera (todas las filas y las columnas) tal y como se almacenan en el disco. Aunque las operaciones de lectura multi-bloques mejoran de forma considerable la velocidad del escaneo entero de la tabla, sigue siendo una de las operaciones más costosas. Además de la alta tasa de I/O, un escaneo entero de tabla debe leer todas las filas de la tabla así que puede también consumir una cantidad importante de tiempo de CPU. Ver también “FULL TABLE SCAN”.
- RIDSCN
Esta operación se utiliza por index merge, y probablemente con más frecuencia para precargar datos de las paginas después de haber sido ordenadas.
Uniones
Por lo general, las operaciones de unión procesan sólo dos tablas al mismo tiempo. En el caso de que una sentencia tenga más uniones, éstas se ejecutan de forma secuencial: primero dos tablas y después el resultado intermedio con la siguiente tabla. Por lo tanto, en el contexto de las uniones, el término “tabla” puede también significar “resultado intermedio”.
- NLJOIN
Une dos tablas trayendo el resultado desde una tabla y seleccionando la otra tabla por cada registro de la primera tabla. Ver también “Nested loops”.
- HSJOIN
Hash join carga los registros candidatos desde un lado de la unión dentro de una tabla hash donde se compara cada fila con el otro lado de la unión. Ver también “Hash join”.
- MSJOIN
Merge join combina dos listas ordenadas como la cremallera de un pantalón. Ambos lados de la unión deben ser preordenados. Ver también “Sort merge”.
- ZZJOIN
Es una unión de varias tablas (más de dos) especialmente diseñada para almacenes de datos usando un esquema en estrella.
Ordenar y agrupar
- SORT
Ordena el resultado de acuerdo con la cláusula
order by
. Esta operación necesita una cantidad grande de memoria para materializar el resultado intermedio (sin pipeline). También se utiliza para establecer el orden requerido para las operacionesMSJOIN
oGRPBY
. Adicionalmente, conSORT
se podrian eliminar los registros duplicados con una operacióndistinct
Ver también “Indexar Order By”.La vista
last_explained
indica si se realiza una unicidad entre paréntesis (por ejemplo,SORT (UNIQUE)
). Los ordenamientos Top-N se etiquetan conTOP-N
(por ejemplo, debido afetch first … rows only
).- UNIQUE
Deduplica las filas en un conjunto preordenado. Se emplea para
distinct
cuando el orden requerido puede establecerse sin una operaciónSORT
(por ejemplo, siIXSCAN
se los entrega en el orden requerido). Cuando se necesita una operaciónSORT
, la operaciónSORT
realiza por sí misma la deduplicación.- GRPBY
Agrupa un conjunto de acuerdo a la cláusula
group by
. Esta operación puede ejecutarse usando un algoritmo ordena/agrupa o basado en el hash (desde la versión 10.1). Ver también “Indexar Group By”.La vista
last_explained
indica el modo de recolección entre paréntesis (por ejemplo,GRPBY (HASH COMPLETE)
).
Sentencia Top-N
DB2 LUW no tiene operaciones del plan de ejecución que se relacionen con las cláusulas top-N como fetch first ... rows only
. Sin embargo, si se realiza un SORT
, la vista last_explained
indica la optimización top-N entre paréntesis (por ejemplo,
SORT (TOP-N)
).
En el caso de que no haya la operación SORT
esperada, no existe una marca visible del comportamiento top-N dentro del plan de ejecución. Sin embargo, una repentina bajada del valor del coste o de la estimación del número de filas a falta de predicados podría dar una idea de lo que debe ser una cláusula top-N en uso.