Есть ли ощутимая разница между уникальным кластеризованным индексом и кластерным первичным ключом?

17

Я понимаю, что между этими двумя понятиями могут быть различия в значении или намерениях , но существуют ли различия в поведении или производительности между кластерным первичным ключом и кластерным уникальным индексом?

goric
источник

Ответы:

15

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

Да, и тот факт, что таблица может иметь один ПК и много Великобритании :-).

Это оба различия в НАМЕРЕНИИ, а не в РАБОТЕ. В противном случае, я не думаю, что есть какая-либо разница. За любым PK или UK SQL Server строит индекс (в зависимости от запроса, кластеризованный или нет), и способ его использования прозрачен для источника.

Мэриан
источник
Таким образом, нет никакой причины использовать PK, кроме (A) в качестве псевдонима NOT NULL UNIQUE CLUSTEREDили (B), чтобы подчеркнуть, что конкретный UQ является «особенным» в смысле метаданных, даже если RDMS является агностиком?
Джон на все руки
Да, как-то так, я бы сам выбрал вариант B :-).
Marian
Есть причина - не использовать специальное значение NULL там, где оно неуместно!
Джеймс Райан
@JamesRyan: Это объясняется причиной JA на все руки #A.
Андрей М
1
@JamesRyan: Да, между PRIMARY KEYи NOT NULL UNIQUEпервым будет гораздо труднее превратиться NULL UNIQUE(особенно если на ограничение уже ссылался внешний ключ). Конечно, предотвратит случайные изменения от NOT NULLдо NULL.
Андрей М
8

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

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

mrdenny
источник
Вы имеете в виду, что дальнейшие индексы в этой таблице указывают непосредственно на строки в кластерном индексе, игнорируя индекс, созданный первичным ключом?
bernd_k
1
Это верно. Некластеризованные индексы будут указывать на ключ кластеризации, а не на первичный ключ. Если первичный ключ является некластеризованным ключом, то все, что он делает, - применяет уникальность для столбца, который не поддерживает значения NULL, чтобы его можно было использовать через внешний ключ.
Мрденный