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 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 según índice (IOT). Ver también 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 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 FULL TABLE SCAN.

Operaciones de unión (join)

Por lo general, las operaciones de unión procesan sólo dos tablas a la vez. En el caso de que la sentencia tenga que unir más tablas, las operaciones 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 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 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 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 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 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 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 Indexar Group By.

Sentencias Top-N

Top

Aborta las operaciones subyacentes cuando se alcanza el número de filas deseado. Ver también 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 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