Ключовите колони на индекса са част от b-дървото на индекса. Включените колони не са.
Вземете два индекса:
CREATE INDEX index1 ON table1 (col1, col2, col3)
CREATE INDEX index2 ON table1 (col1) INCLUDE (col2, col3)
index1
е по-подходящ за този вид заявка:
SELECT * FROM table1 WHERE col1 = x AND col2 = y AND col3 = z
Докато index2
е по-подходящ за този вид заявка:
SELECT col2, col3 FROM table1 WHERE col1 = x
В първата заявка, index1
предоставя механизъм за бързо идентифициране на интересните редове. Заявката (вероятно) ще се изпълни като търсене в индекс, последвано от търсене в отметка за извличане на пълния ред(ове).
Във втората заявка, index2
действа като покриващ индекс. SQL Server изобщо не трябва да удря основната таблица, тъй като индексът предоставя всички данни, от които се нуждае, за да удовлетвори заявката. index1
може също да действа като покриващ индекс в този случай.
Ако искате покриващ индекс, но не искате да добавите всички колони към b-дървото, защото не търсите по тях или не можете, защото те не са разрешен тип данни (напр. XML), използвайте Клауза INCLUDE.