Индексы SQL2005

Просканировал базу данных SQL2005 и увидел следующие два индекса для таблицы:

**PK_CLUSTERED_INDEX**
 USER_ID
 COMPANY_ID
 DEPARTMENT_ID

**NON-unique_NON-clustered_INDEX**
 USER_ID
 COMPANY_ID

Моя первоначальная мысль: отбросьте последний индекс, поскольку PK_CLUSTERED_INDEX уже содержит эти столбцы, правильный порядок и сортировку. Приносит ли вообще последний индекс какой-то прирост?


person Tobbe    schedule 24.02.2010    source источник


Ответы (3)


При поиске по столбцам User_ID или User_ID и Company_ID оба индекса могут выполнить это. Однако в этом случае идеальным вариантом будет только индекс PK, если в дополнение к этим двум полям запрашивается также Department_Id.

Если запрос фильтрует по User_ID и Company_ID и должен возвращать другие столбцы данных, тогда индекс PK по-прежнему лучше, поскольку у него есть все данные под рукой. В то время как некластеризованный индекс этого не делает, вероятно, потребуется поиск по ключу для извлечения дополнительных полей, что не так эффективно.

Мне это кажется лишним, поэтому я определенно подумаю об его удалении.

Чтобы увидеть, действительно ли используется индекс / оценить уровень использования, вы можете запустить один из различных скриптов статистики использования индекса. Хороший пример - здесь.

person AdaTheDev    schedule 24.02.2010

В этом случае отбросьте индекс, поскольку он неуникальный, я бы поспорил, что оптимизатор никогда не попадет в него, первый индекс более уникален и не требует поиска строки после нахождения совпадения.

У первого все лучше, вы ничего не потеряете, уронив вторую.

person Nick Craver    schedule 24.02.2010

Я бы отбросил индекс NON-unique_NON-clustertered_INDEX, он избыточен и не нужен.

person KM.    schedule 24.02.2010