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

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.

Previous pageNext page

You can’t learn everything in one day. Subscribe the newsletter via E-Mail, Twitter or RSS to gradually catch up. Have a look at modern-⁠sql.com as well.

Acerca del autor

Foto de Markus Winand

Markus Winand es defensor del resurgimiento del SQL. Su misión es la de presentar a los desarrolladores la evolución de SQL en el siglo XXI. Es posible contratar a Markus según disponibilidad o como orador o consultor en winand.at.

Adquiere tu libro

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

La esencia del tuning de SQL en 200 páginas

Compra ahora
(libro de bolsillo y/o PDF)

Contratar a Markus

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

Entrar en contacto con Markus

Markus Winand en LinkedInMarkus Winand en XINGMarkus Winand en Twitter
“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 | Privacidad y RGPD | CC-BY-NC-ND 3.0 licencia