Kolumny klucza indeksu są częścią b-drzewa indeksu. Uwzględnione kolumny nie są.
Weź dwa indeksy:
CREATE INDEX index1 ON table1 (col1, col2, col3)
CREATE INDEX index2 ON table1 (col1) INCLUDE (col2, col3)
index1
lepiej nadaje się do tego rodzaju zapytań:
SELECT * FROM table1 WHERE col1 = x AND col2 = y AND col3 = z
Natomiast index2
lepiej nadaje się do tego rodzaju zapytań:
SELECT col2, col3 FROM table1 WHERE col1 = x
W pierwszym zapytaniu index1
zapewnia mechanizm szybkiego identyfikowania interesujących wierszy. Zapytanie (prawdopodobnie) zostanie wykonane jako wyszukiwanie indeksu, po którym nastąpi wyszukiwanie zakładek w celu pobrania pełnych wierszy.
W drugim zapytaniu index2
działa jako indeks pokrywający. SQL Server nie musi w ogóle trafiać do tabeli bazowej, ponieważ indeks dostarcza wszystkie dane potrzebne do spełnienia zapytania. index1
może również działać jako indeks pokrycia w tym przypadku.
Jeśli potrzebujesz indeksu pokrywającego, ale nie chcesz dodawać wszystkich kolumn do b-drzewa, ponieważ ich nie szukasz lub nie możesz, ponieważ nie są one dozwolonym typem danych (np. XML), użyj WŁĄCZ klauzulę.