должен ли первичный ключ быть включен в регулярные индексы - PullRequest
0 голосов
/ 29 августа 2010

Что касается MS SQL-сервера, Включен ли столбец первичного ключа таблицы в обычные неуникальные индексы этой таблицы?

если нет, имеет ли смысл включать его в индекс?

create table dbo.People (
PK_PersonId int not null,
PersonName nvarchar (100),
Bunch of Other Fields
,

поэтому при создании индекса PersonName имеет смысл добавить столбец первичного ключа PK_PersonId?

Ответы [ 4 ]

7 голосов
/ 29 августа 2010

Когда вы создаете PK в SQL Server, по умолчанию он создает кластеризованный индекс для этих столбцов

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

Другими словами, некластеризованный индекс уже содержит значение PK

1 голос
/ 29 августа 2010

Некластеризованный индекс в любом случае будет ссылаться на кластеризованный индекс, а не на фактические данные.По умолчанию PK кластеризован в SQL Server.

Таким образом, нет необходимости добавлять его: он существует неявно , если PersonID является кластеризованным индексом, как определено в ограничении PRIMARY KEY.*

0 голосов
/ 29 августа 2010

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

0 голосов
/ 29 августа 2010

Если ваш PK также является ключом кластеризованного индекса (в соответствии с SQL Menace, по умолчанию), то PK будет включен во все некластеризованные индексы

http://msdn.microsoft.com/en-us/library/ms177484.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...