As colunas de chave de índice fazem parte da árvore b do índice. As colunas incluídas não são.
Pegue dois índices:
CREATE INDEX index1 ON table1 (col1, col2, col3)
CREATE INDEX index2 ON table1 (col1) INCLUDE (col2, col3)
index1
é mais adequado para esse tipo de consulta:SELECT * FROM table1 WHERE col1 = x AND col2 = y AND col3 = z
Considerando que
index2
é mais adequado para esse tipo de consulta:SELECT col2, col3 FROM table1 WHERE col1 = x
Na primeira consulta,
index1
fornece um mecanismo para identificar rapidamente as linhas de interesse. A consulta (provavelmente) será executada como uma busca de índice, seguida por uma pesquisa de marcador para recuperar a(s) linha(s) completa(s). Na segunda consulta,
index2
funciona como um índice de cobertura. O SQL Server não precisa atingir a tabela base, pois o índice fornece todos os dados necessários para satisfazer a consulta. index1
também poderia atuar como um índice de cobertura neste caso. Se você deseja um índice de cobertura, mas não deseja adicionar todas as colunas à b-tree porque não as procura, ou não pode porque elas não são um tipo de dados permitido (por exemplo, XML), use o cláusula INCLUIR.