Некластеризованный индекс в столбце кластеризованного индекса повышает производительность?

В SQL Server 2005 анализатор запросов много раз говорил мне создать некластеризованный индекс для столбца первичного идентификатора таблицы, которая уже имеет кластеризованный индекс. После выполнения этой рекомендации план выполнения запроса сообщает, что запрос должен быть быстрее.

Почему некластеризованный индекс в том же столбце (с тем же порядком сортировки) будет быстрее, чем кластеризованный индекс?


person Kevin Berridge    schedule 03.09.2008    source источник


Ответы (3)


Кластеризованный индекс содержит все данные для таблицы, тогда как некластеризованный индекс имеет только столбец + расположение кластеризованного индекса или строки, если она находится в куче (таблица без кластеризованного индекса). Поэтому, если вы выполняете подсчет (столбец), и этот столбец индексируется некластеризованным индексом, SQL-серверу нужно сканировать только некластеризованный индекс, который быстрее, чем кластеризованный индекс, потому что больше уместится на страницах 8K

person SQLMenace    schedule 03.09.2008

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

person BlaM    schedule 03.09.2008

Кластеризованный индекс обычно работает быстрее, но у вас может быть только 1 кластерный индекс. Поэтому, если таблица уже имеет кластеризованный индекс в другом столбце, то лучше всего использовать некластеризованный индекс.

person Joel Coehoorn    schedule 03.09.2008