de Martin LE TARNEC.

Operaciones


Esta sección explica las operaciones más comunes del plan de ejecución en la base de datos SQL Server. Se puede también echar un vistazo a la documentación de Microsoft.

Acceso a tabla y índice

SQL Server tiene una terminología sencilla: las operaciones “Scan” leen el índice o la tabla entera mientras las operaciones “Seek” usan el B-tree o la dirección física (RID, como ROWID en Oracle) para tener acceso a una parte especifica del índice o de la tabla.

Index Seek, Clustered Index Seek

Index Seek realiza un recorrido del B-tree y lee los nodos hoja para encontrar todas las entradas que coinciden. Ver también el Anatomía de un índice SQL.

Index Scan, Clustered Index Scan

Lee el índice entero (todas las filas) en el orden del índice. Dependiendo de varias estadísticas del sistema, la base de datos podría realizar esta operación si se necesitan todas las filas en el orden del índice, por ejemplo, debido a la cláusula del order by.

Key Lookup (Clustered)

Recupera una sola fila desde una agrupación de índice. Es similar a la operación de Oracle INDEX UNIQUE SCAN por una tabla organizada como índice (IOT). Ver también el Agrupación de datos.

RID Lookup (Heap)

Recupera una sola fila desde una tabla, como la operación de Oracle TABLE ACCESS BY INDEX ROWID. Ver también el Anatomía de un índice SQL.

Table Scan

Es también conocido como un escaneo entero de la tabla. Lee la tabla entera (todas las filas y las columnas) tal y como se almacenan sobre el disco. Aunque las operaciones de lectura de multi-bloques pueden mejorar la velocidad de Table Scan, es todavía una de las operaciones más costosas. Además de la tasa alta de I/O, Table Scan debe también leer todas las filas de la tabla así que también se puede consumir una grande cantidad de tiempo CPU. Ver también el FULL TABLE SCAN.

Operaciones de unión (join)

Por lo general, las operaciones de unión procesan solo dos tablas a la vez. En el caso de que la sentencia tenga que unir más, se ejecutan de forma secuencial: primero las dos tablas y después el resultado intermedio con la siguiente tabla. En el contexto de las uniones, el término “tabla” también puede hacer referencia a “resultado intermedio”.

Nested Loops

Unir dos tablas es buscar el resultado desde una tabla y después seleccionar la otra tabla por cada fila de la primera. SQL Server también utiliza la operación “nested loops” para recuperar datos de la tabla después de tener un acceso al índice. Ver también el Nested loops.

Hash Match

La coincidencia hash de la unión carga los registros candidatos de un lado de la unión dentro de la tabla hash y después se comparan cada fila con el otro lado de la unión. Ver también el Hash join.

Merge Join

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

Ordenar y agrupar

Sort

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

Sort (Top N Sort)

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

Stream Aggregate

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

Hash Match (Aggregate)

Agrupa el resultado usando una tabla hash. Esta operación necesita gran cantidad de memoria para materializar el resultado intermedio (sin pipeline). De cualquier forma, la salida no está ordenada. Ver también el Indexar Group By.

Sentencias Top-N

Top

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

La eficiencia de la sentencia top-N depende del modo de ejecución de las operaciones subyacentes. Es muy ineficiente cuando se aborta operaciones sin pipeline como Sort.

Acerca del autor

Foto de Markus Winand

Markus Winand enseña eficientemente SQL, en casa y online. Minimiza el tiempo de desarrollo utilizando moderno SQL y optimiza el tiempo de ejecución con indexación inteligente. Para ello también ha publicado el libro SQL Performance Explained.

“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