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énINDEX 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: El segundo poder de la indexación”.- 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”.