Полезен ли индекс (1 столбец) для первичного ключа (> 1 столбца)? (SQL) - PullRequest
0 голосов
/ 06 марта 2012

У меня есть таблица с более чем 40 тыс. Строк и первичным ключом, состоящим из 2 столбцов в этой таблице.

Может ли отдельный некластеризованный (НЕ уникальный!) Индекс в одном из этих столбцов первичного ключа ускорить запросына ЭТОМ столбце (без использования других столбцов ПК)?Или SQL Server будет использовать первичный ключ одинаково эффективно для доступа только к одному столбцу первичного ключа?

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

1 Ответ

0 голосов
/ 06 марта 2012

Предположим, что PK включен: Field1, Field2 (в этом порядке)

  • Запросы, которые фильтруются в Field1, могут извлечь выгоду из этого индекса PK (поиск по индексу).
  • Запросы, которые фильтруются в Field1 и Field2, могут извлечь выгоду из этого индекса PK (поиск по индексу).
  • Запросы, которые фильтруются в Field2, не могут использовать этот индекс PK (сканирование индекса).

Так что в последнем случае вы можете рассмотреть отдельный индекс для Field2. Обратите внимание, что это немного больше, если, например, вы возвращаете другие поля в таблице, кроме полей PK. В этом случае, если ваш PK CLUSTERED (по умолчанию PK), то данные уже находятся в индексе. Но в NONCLUSTERED индексе (например, если вы создали его в Field2) он должен был бы затем отключиться и выполнить поиск, чтобы получить другие поля, возвращаемые для запроса. Итак, вы можете войти в сферу принятия решения, включать ли столбцы в индекс NONCLUSTERED или нет.

Рекомендую немного почитать, стоит поторопиться.

...