2013-10-09 2 views
1

Я несколько новичок в планах выполнения. Я всегда понимал, что кластеризованные индексы значительно быстрее, потому что фактическая строка данных включена в листовой уровень дерева индексов, тогда как некластеризованный содержит только индексированное значение столбца плюс указатели на расположение остальных данных строки. поэтому некластеризованное имеет больше IO, чем кластеризованное.Почему этот кластерный индекс имеет большую стоимость, чем тот же некластеризованный сервер sql

Чтобы проверить это, я использовал 1 000 000 записей таблицы с EmployeeID (первый столбец) в качестве первичного ключа, а затем добавил некластеризованный индекс в том же поле. Затем я использовал подсказки для сравнения результатов каждого используемого индекса.

Select EmployeeID from Employees with(index(PK_EmployeeID)) 
go 

select EmloyeeID from Employees with(index(IX_EmployeeID)) 
go 

Результаты показывают, что существует более IO и стоимость запроса (по отношению к партии) для кластерной чем некластерный. Может ли кто-нибудь объяснить это?

ответ

4

Для вашего тестового запроса индекс является «охватывающим» индексом, поскольку он уже содержит все столбцы, необходимые для набора результатов. Поэтому никаких дополнительных чтений для фактической таблицы не требуется. А поскольку индекс меньше (меньше страниц), доступ быстрее.
Кластеризованный индекс фактически является самой таблицей, упорядоченной по индексу. Поскольку в нем больше столбцов, требуется больше чтения страниц.

Смежные вопросы