de Martin LE TARNEC.

Operaciones


Mi recurso personal y favorito de las operaciones del plan de ejecución es la lista de Julian Dyke : sin embargo, lo analiza desde un punto de vista diferente.

Acceso a tabla e índice

INDEX UNIQUE SCAN

INDEX UNIQUE SCAN realiza solamente el recorrido del B-tree. La base de datos usa esta operación si una restricción de unicidad asegura que el criterio de búsqueda no pueda coincidir con más de una entrada. Ver también el Capítulo 1, “Anatomía de un índice SQL.

INDEX RANGE SCAN

INDEX RANGE SCAN realiza el recorrido del B-tree y y sigue la cadena de los nodos hoja para encontrar todas las entradas que coinciden. Ver también el Capítulo 1, “Anatomía de un índice SQL.

El llamado predicados de filtro sobre índice por lo general causa problemas de rendimiento para INDEX RANGE SCAN. La siguiente sección explica cómo identificarlos.

INDEX FULL SCAN

Lee el índice entero (todos los registros) en el orden del índice. Dependiendo de varias estadísticas del sistema, la base de datos podría realizar la operación en el orden del índice si se necesitan todas las filas gracias a la cláusula order by correspondiente. Por su parte, el optimizador podría usar también INDEX FAST FULL SCAN y realizar una operación de ordenamiento adicional. Ver el Capítulo 6, “Ordenar y agrupar.

INDEX FAST FULL SCAN

Lee el índice entero (todos los registros) como se almacenan en el disco. Esta operación se realiza en lugar de un escaneo entero de la tabla si todas las columnas están disponibles dentro del índice. De la misma forma que TABLE ACCESS FULL, INDEX FAST FULL SCAN puede beneficiar de operaciones de lectura multi-bloques. Ver el Capítulo 5, “Agrupación de datos.

TABLE ACCESS BY INDEX ROWID

Recupera una fila desde la tabla usando el ROWID recuperado desde la búsqueda LOOKUP anterior. Ver también el Capítulo 1, “Anatomía de un índice SQL.

TABLE ACCESS FULL

También se denomina escaneo entero de la tabla. Lee la tabla entera (todas las filas y las columnas) como se almacenan en el disco. Aunque las operaciones de lectura multi-bloques mejoran de modo considerable la velocidad del escaneo entero de la tabla, es todavía una de las operaciones más costosas. Junto a la tasa alta de I/O, un escaneo entero de la tabla debe examinar todas las filas de la tabla así que puede consumir también una gran cantidad de tiempo CPU. Ver también el FULL TABLE SCAN.

Uniones (Joins)

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

NESTED LOOPS JOIN

Se trata de unir dos tablas yendo a buscar el resultado desde una tabla y seleccionando la otra tabla por cada fila desde la primera. Ver también Nested loops.

HASH JOIN

Carga los registros candidatos desde un lado de la unión dentro de la tabla hash, y después compara cada fila con el otro lado de la unión. Ver también Hash join.

MERGE JOIN

Merge join combina dos listas ordenadas como si fuera la cremallera de un pantalón. Ambos lados de la unión deben ser preordenados. Ver también Sort merge.

Ordenar y agrupar

SORT ORDER BY

Ordena el resultado de acuerdo a la cláusula order by. Esta operación necesita una cantidad importante de memoria para materializar el resultado intermedio (sin pipeline). Ver también Indexar Order By.

SORT ORDER BY STOPKEY

Ordena un subconjunto del resultado de acuerdo con la cláusula order by, usado por las sentencias top-N si la ejecución en pipeline no es posible. Ver también Seleccionar registros Top-N.

SORT GROUP BY

Ordena el resultado configurado sobre las columnas del group by y combina el resultado ordenado en la segunda etapa. Esta operación necesita una cantidad importante de memoria para materializar el conjunto del resultado intermedio (sin pipeline). Ver también Indexar Group By.

SORT GROUP BY NOSORT

Agrega un conjunto preordenado de acuerdo con la cláusula group by. Esta operación no pone el resultado intermedio en memoria: se ejecuta de manera pipeline. Ver también Indexar Group By.

HASH GROUP BY

Agrupa el resultado usando la tabla hash. Esta operación necesita una cantidad de memoria importante para materializar el conjunto del resultado intermedio (sin pipeline). La salida no está ordenada de manera determinista. Ver también Indexar Group By.

Sentencias Top-N

La eficiencia de las sentencias top-N depende del modo de ejecución de las operaciones subyacentes. Son muy ineficientes cuando se abortan las operaciones sin pipeline como SORT ORDER BY.

COUNT STOPKEY

Aborta las operaciones subyacentes cuando se alcanza el número deseado de filas. Ver también Seleccionar registros Top-N.

WINDOW NOSORT STOPKEY

Usa una función de ventana (cláusula over) para abortar la ejecución cuando se alcanza el número deseado de filas. Ver también Utilizar las funciones de ventana para una paginación.

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