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

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

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

3 ответа

Решение

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

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

Из MSDN:

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

А также:

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

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

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

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

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

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

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

Другие вопросы по тегам