Как ключевое слово «первичный ключ» связано с кластерными индексами в SQL Server? - PullRequest
5 голосов
/ 07 сентября 2010

Как ключевое слово PRIMARY KEY связано с кластеризованными индексами в SQL Server?

(Некоторые люди хотят ответить на этот вопрос вместо на другой вопрос, который я задал , поэтому я предоставляю им лучшее место для этого.)

Ответы [ 3 ]

9 голосов
/ 07 сентября 2010

Как ключевое слово PRIMARY KEY относится к кластеризованным индексам в MS SqlServer?

По умолчанию PRIMARY KEY реализовано как кластеризованный индекс.Однако вы также можете подкрепить его некластеризованным индексом (указав NONCLUSTERED опций для его объявления)

Кластерный индекс не обязательно является PRIMARY KEY.Он даже может быть неуникальным (в этом случае к каждому ключу добавляется скрытый столбец с именем uniqueifier).

Обратите внимание, что кластерный индекс на самом деле не является индексом (т. Е. Проекцией упорядоченной таблицы).иначе со ссылками на оригинальные записи).Это - это сама таблица с упорядоченными исходными записями.

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

5 голосов
/ 07 сентября 2010

Кластерный индекс таблицы обычно определяется в столбцах первичного ключа.

Это, однако, не является строгим требованием.

С MSDN :

При создании ограничения PRIMARY KEY уникальный кластеризованный индекс для столбца или столбцов создается автоматически, если кластеризованный индекс в таблице еще не существует и вы не указываете уникальный некластеризованный индекс.

И:

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

4 голосов
/ 07 сентября 2010

Первичный ключ - это, как следует из названия, первичный уникальный идентификатор строки в вашей таблице.Кластерный индекс физически упорядочивает данные в соответствии с индексом.Хотя SQL Server будет кластеризовать первичный ключ по умолчанию, между ними нет прямой связи.

...