de Martin LE TARNEC.

Operaciones del plan de ejecución en DB2 LUW


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 para IXSCAN. La siguiente sección explica cómo identificarlos. Se parece a las operaciones INDEX ... SCAN de Oracle.

La ausencia de los predicados START y STOP 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)).

EISCAN - TODO: sólo para "index extentions"

Parecido a IXSCAN pero puede utilizar múltiples condiciones START/STOP.

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ón TABLE 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 operaciones MSJOIN o GRPBY. Adicionalmente, con SORT se podrian eliminar los registros duplicados con una operación distinct 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 con TOP-N (por ejemplo, debido a fetch first … rows only).

UNIQUE

Deduplica las filas en un conjunto preordenado. Se emplea para distinct cuando el orden requerido puede establecerse sin una operación SORT (por ejemplo, si IXSCAN se los entrega en el orden requerido). Cuando se necesita una operación SORT, la operación SORT 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.

Acerca del autor

Foto de Markus Winand

Markus Winand enseña SQL eficiente, en casa y online. Mejora el tiempo de desarrollo utilizando SQL moderno y optimiza el tiempo de ejecución con indexación inteligente. Su libro Rendimiento SQL explicado se ha convertido en lectura obligada sobre el tema.

Adquiere tu libro en Amazon

Portada de “Rendimiento SQL explicado”: Ardilla corriendo en la hierba

La esencia del tuning de SQL en 200 páginas

Compra en Amazon
(solo en papel)

Libro y PDF también disponible en la tienda de Markus.

Contratar a Markus

La manera más rápida y fácil de beneficiarse de su extenso conocimiento y experiencia.
Aprende más »

“Use The Index, Luke” de Markus Winand se halla bajo licencia Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
Aspectos legales | Contacto | SIN GARANTÍA | Marcas | Privacy | CC-BY-NC-ND 3.0 licencia