Indeksnøglekolonner er en del af indeksets b-træ. Inkluderede kolonner er ikke.
Tag to indekser:
CREATE INDEX index1 ON table1 (col1, col2, col3)
CREATE INDEX index2 ON table1 (col1) INCLUDE (col2, col3)
index1
er bedre egnet til denne form for forespørgsel:
SELECT * FROM table1 WHERE col1 = x AND col2 = y AND col3 = z
Hvorimod index2
er bedre egnet til denne form for forespørgsel:
SELECT col2, col3 FROM table1 WHERE col1 = x
I den første forespørgsel, index1
giver en mekanisme til hurtigt at identificere rækkerne af interesse. Forespørgslen vil (sandsynligvis) udføres som en indekssøgning efterfulgt af et bogmærkeopslag for at hente hele rækken/rækkerne.
I den anden forespørgsel, index2
fungerer som et dækkende indeks. SQL Server behøver slet ikke at ramme basistabellen, da indekset giver alle de data, det skal bruge for at tilfredsstille forespørgslen. index1
kunne også fungere som et dækkende indeks i dette tilfælde.
Hvis du ønsker et dækkende indeks, men ikke ønsker at tilføje alle kolonner til b-træet, fordi du ikke søger på dem, eller ikke kan, fordi de ikke er en tilladt datatype (f.eks. XML), skal du bruge INKLUDERE klausul.