uso una tipos tablas tabla indice indexar ejemplos datos crear consultar sql sql-server indexing

una - ¿Qué son los índices de cobertura y las consultas cubiertas en SQL Server?



tipos de indices en sql (8)

¿Puede explicar los conceptos y la relación entre Cubrir índices y Consultas cubiertas en el Servidor SQL de Microsoft?


Aquí hay un artículo en devx.com que dice:

Crear un índice no agrupado que contenga todas las columnas utilizadas en una consulta SQL, una técnica denominada índice que cubre

Solo puedo suponer que una consulta cubierta es una consulta que tiene un índice que cubre todas las columnas en su conjunto de registros devuelto. Una advertencia: el índice y la consulta tendrían que crearse para permitir que el servidor SQL realmente infiera de la consulta que el índice es útil.

Por ejemplo, una combinación de una tabla en sí misma podría no beneficiarse de dicho índice (dependiendo de la inteligencia del planificador de ejecución de consultas SQL):

PersonID ParentID Name 1 NULL Abe 2 NULL Bob 3 1 Carl 4 2 Dave

Supongamos que hay un índice en PersonID,ParentID,Name : este sería un índice de cobertura para una consulta como:

SELECT PersonID, ParentID, Name FROM MyTable

Pero una consulta como esta:

SELECT PersonID, Name FROM MyTable LEFT JOIN MyTable T ON T.PersonID=MyTable.ParentID

Probablemente no sería tan bueno, a pesar de que todas las columnas están en el índice. ¿Por qué? Porque realmente no le está diciendo que quiere usar el índice triple de PersonID,ParentID,Name .

En su lugar, está creando una condición basada en dos columnas: PersonID y ParentID (que ParentID Name ) y luego está solicitando todos los registros, con las columnas PersonID, Name . De hecho, dependiendo de la implementación, el índice podría ayudar a la última parte. Pero para la primera parte, es mejor tener otros índices.


Cuando simplemente recordé que un Índice Agrupado consiste en una lista ordenada por no clave de TODAS las columnas en la tabla definida, las luces se encendieron para mí. La palabra "grupo", entonces, se refiere al hecho de que hay un "grupo" de todas las columnas, como un grupo de peces en ese "punto caliente". Si no hay un índice que cubra la columna que contiene el valor buscado (el lado derecho de la ecuación), el plan de ejecución utiliza una búsqueda de índice agrupado en la representación del índice agrupado de la columna solicitada porque no encuentra la columna solicitada en ningún otro índice "cubriendo". La falta causará un operador de búsqueda de índice agrupado en el plan de ejecución propuesto, donde el valor buscado se encuentra dentro de una columna dentro de la lista ordenada representada por el índice agrupado.

Entonces, una solución es crear un índice no agrupado que tenga la columna que contiene el valor solicitado dentro del índice. De esta forma, no es necesario hacer referencia al índice agrupado, y el optimizador debería poder enganchar ese índice en el plan de ejecución sin ninguna sugerencia. Sin embargo, si hay un predicado que nombra la clave de agrupamiento de una sola columna y un argumento con un valor escalar en la clave de agrupamiento, el operador de búsqueda de índice agrupado seguirá utilizándose, incluso si ya hay un índice de cobertura en una segunda columna en el tabla sin un índice


Se realiza una consulta de cobertura donde se pueden hacer coincidir todos los predicados utilizando los índices en las tablas subyacentes.

Este es el primer paso para mejorar el rendimiento del sql bajo consideración.



Un índice de cobertura es un índice no agrupado. Tanto los índices agrupados como los no agrupados usan B-Trees para mejorar la búsqueda de datos, la diferencia es que en las hojas de un índice agrupado se almacena físicamente un registro completo (es decir, una fila), pero este no es el caso de Índices no agrupados.

Ejemplo: tengo una tabla con tres columnas: ID, Fname y Lname.

Sin embargo, para un índice no agrupado, hay dos posibilidades: o la tabla ya tiene un índice agrupado o no:

Como muestran los dos diagramas, dichos índices no agrupados no proporcionan un buen rendimiento, porque no pueden encontrar el valor favorito (es decir, Lname) únicamente del árbol B. En su lugar, tienen que hacer un paso adicional de búsqueda (búsqueda clave o RID) para encontrar el valor de Lname. Y aquí es donde aparece el índice cubierto en la pantalla. Aquí, el índice de ID no agrupado codifica el valor de Lname al lado en las hojas del árbol B y ya no hay necesidad de ningún tipo de búsqueda.


Una consulta cubierta es una consulta en la que todas las columnas del conjunto de resultados de la consulta se extraen de índices no agrupados.

Una consulta se convierte en una consulta cubierta por la disposición juiciosa de los índices.

Una consulta cubierta suele ser más eficaz que una consulta no cubierta, en parte porque los índices no agrupados tienen más filas por página que los índices agrupados o los índices de montón, por lo que es necesario introducir menos páginas en la memoria para satisfacer la consulta. Tienen más filas por página porque solo parte de la fila de la tabla es parte de la fila del índice.

Un índice de cobertura es un índice que se utiliza en una consulta cubierta. No existe un índice que, en sí mismo, sea un índice de cobertura. Un índice puede ser un índice de cobertura con respecto a la consulta A, mientras que al mismo tiempo no es un índice de cobertura con respecto a la consulta B.


un índice de cobertura es el que proporciona todas las columnas requeridas y en el que el servidor SQL no ha saltado al índice agrupado para encontrar una columna. Esto se logra usando un índice no agrupado y usando la opción INCLUDE para cubrir las columnas. Las columnas sin clave se pueden incluir solo en índices no agrupados. Las columnas no se pueden definir tanto en la columna clave como en la lista INCLUDE. Los nombres de columna no se pueden repetir en la lista INCLUDE. Las columnas sin clave pueden soltarse de una tabla solo después de que el índice sin clave se descarta primero. Por favor mira los detalles aquí


Si todas las columnas solicitadas en la lista de select de consulta están disponibles en el índice , el motor de consulta no tiene que volver a buscar en la tabla, lo que puede aumentar significativamente el rendimiento de la consulta. Como todas las columnas solicitadas están disponibles en el índice, el índice cubre la consulta. Por lo tanto, la consulta se denomina consulta de cobertura y el índice es un índice de cobertura.

Un índice agrupado siempre puede cubrir una consulta, si las columnas en la lista de selección pertenecen a la misma tabla.

Los siguientes enlaces pueden ser útiles, si es nuevo en los conceptos de índice: