Серверные индексы включают первичный ключ? - PullRequest
16 голосов
/ 01 октября 2010

У одного из моих коллег сложилось впечатление, что при добавлении индекса в таблицу в SQL Server 2008 этот индекс PK также добавляется к этому индексу. Поэтому, если вы используете более широкий первичный ключ, этот ключ также будет включен в новый индекс, значительно увеличивая дисковое пространство, превышающее штраф, уже уплаченный за индекс на ПК. Я не слышал этого раньше, и мои поиски пока пусты.

Надеюсь, кто-то здесь может указать мне соответствующие документы, чтобы подтвердить или опровергнуть это. Пожалуйста

1 Ответ

28 голосов
/ 01 октября 2010

Ваш коллега связывает «Первичный ключ» с «ключом кластеризованного индекса» (возможно, потому что по умолчанию PK, созданный в куче без указания ключевого слова nonclustered, станет кластеризованным индексом таблицы).

Это равно true , что в таблице с кластеризованным индексом значение ключа кластеризованного индекса будет добавлено в качестве включенных столбцов во все некластеризованные индексы, чтобы действовать в качестве локатора строк. (хотя столбцы не будут добавлены дважды, если они уже являются частью определения некластеризованного индекса).

Идеальный ключ кластеризованного индекса -

  • уникальна (чтобы действовать как локатор строк, он должен быть уникальным - SQL Server добавит в свой список уникальность)
  • узкий (как это воспроизводится во всех некластеризованных индексах)
  • статический (Избегайте необходимости обновлять значение в нескольких разных местах)
  • постоянно увеличивающийся
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...