Как ключевое слово `первичный ключ` связано с кластерными индексами в SQL Server?
Как ключевое слово PRIMARY KEY связано с кластерными индексами в SQL Server?
(Кажется, что некоторые люди хотят ответить на этот вопрос вместо другого вопроса, который я задал, поэтому я предоставляю им лучшее место для этого.)
3 ответа
Кластерный индекс таблицы обычно определяется в столбцах первичного ключа.
Это, однако, не является строгим требованием.
Из MSDN:
При создании ограничения PRIMARY KEY уникальный кластеризованный индекс для столбца или столбцов создается автоматически, если кластеризованный индекс в таблице еще не существует и вы не указываете уникальный некластеризованный индекс.
А также:
Вы можете создать кластеризованный индекс для столбца, отличного от столбца первичного ключа, если было указано ограничение некластеризованного первичного ключа.
Как работает
PRIMARY KEY
ключевое слово, связанное с кластерными индексами в MS SqlServer?
По умолчанию PRIMARY KEY
реализован в виде кластерного индекса. Тем не менее, вы можете поддержать его также некластеризованным индексом (указав NONCLUSTERED
варианты ее объявления)
Кластерный индекс не обязательно PRIMARY KEY
, Он может быть даже неуникальным (в этом случае скрытый столбец называется uniqueifier
добавляется к каждому ключу).
Обратите внимание, что кластеризованный индекс на самом деле не является индексом (т. Е. Проекция таблицы, упорядоченной по-разному, со ссылками на оригинальные записи). Это сама таблица с заказанными оригинальными записями.
Когда вы создаете кластеризованный индекс, вы на самом деле "не создаете" ничего, что вы можете отбросить за пределы таблицы. Вы просто переставляете саму таблицу и меняете способ хранения записей.
Первичный ключ, как следует из названия, является первичным уникальным идентификатором строки в вашей таблице. Кластерный индекс физически упорядочивает данные в соответствии с индексом. Хотя SQL Server будет кластеризовать первичный ключ по умолчанию, между ними нет прямой связи.