Las columnas de clave de índice forman parte del árbol b del índice. Las columnas incluidas no lo son.
Tome dos índices:
CREATE INDEX index1 ON table1 (col1, col2, col3)
CREATE INDEX index2 ON table1 (col1) INCLUDE (col2, col3)
index1
es más adecuado para este tipo de consulta:
SELECT * FROM table1 WHERE col1 = x AND col2 = y AND col3 = z
Mientras que index2
es más adecuado para este tipo de consulta:
SELECT col2, col3 FROM table1 WHERE col1 = x
En la primera consulta, index1
proporciona un mecanismo para identificar rápidamente las filas de interés. La consulta (probablemente) se ejecutará como una búsqueda de índice, seguida de una búsqueda de marcador para recuperar la(s) fila(s) completa(s).
En la segunda consulta, index2
actúa como un índice de cobertura. SQL Server no tiene que acceder a la tabla base en absoluto, ya que el índice proporciona todos los datos que necesita para satisfacer la consulta. index1
también podría actuar como un índice de cobertura en este caso.
Si desea un índice de cobertura, pero no desea agregar todas las columnas al árbol b porque no las busca, o no puede porque no son un tipo de datos permitido (por ejemplo, XML), use el Cláusula INCLUDE.