Чи є відчутна різниця між унікальним кластерним індексом та кластеризованим первинним ключем?


17

Я розумію, що може бути різниця у значенні чи намірі між ними, але чи є поведінкові чи ефективні відмінності між кластеризованим первинним ключем та кластеризованим унікальним індексом?

Відповіді:


15

Одна з головних відмінностей полягає в тому, що унікальний індекс може мати значення NULL, яке не дозволено в первинному ключі. Кластерно чи ні, це головна відмінність практичної реалізації Первинного ключа від Унікального ключа.

О, і те, що на столі може бути одна ПК та багато Великобританії :-).

Це обидві відмінності в НАМЕРЕННІ, а не в ВИВЧЕННІ. Інакше я не думаю, що різниці є. За будь-яким ПК або Великобританією SQL Server створює індекс (залежно від запиту, кластеризованого чи ні), і спосіб його використання є прозорим для джерела.


Тож немає ніяких причин використовувати ПК, за винятком (A) як псевдоніму для NOT NULL UNIQUE CLUSTEREDабо (B), щоб підкреслити, що певний UQ є "особливим" у сенсі метаданих, навіть якщо RDMS є агностичним?
Йон усіх торгів

Так, щось подібне, я б пішов на варіант B сам :-).
Мар’ян

Є причина - перестати використовувати спеціальне значення NULL там, де це недоцільно!
JamesRyan

@JamesRyan: Це висвітлено в Jon з причини "А" всіх торгів.
Андрій М

1
@JamesRyan: Так, між PRIMARY KEYі NOT NULL UNIQUEколишнім було б набагато важче перетворитись NULL UNIQUE(особливо, якщо на обмеження вже посилався іноземний ключ). Безумовно, не допустити випадкових змін з NOT NULLдо NULL.
Андрій М

8

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

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


Ви маєте на увазі, що подальші індекси цієї таблиці вказують безпосередньо на рядки кластерного індексу, ігноруючи індекс, створений первинним ключем?
bernd_k

1
Це правильно. Некластеризовані індекси будуть вказувати на кластерний ключ, а не на первинний ключ. Якщо первинний ключ - це некластеризований ключ, то все, що він робить, - це надати унікальність на стовпчик, який не підтримує значення NULL, щоб його можна було використовувати за допомогою зовнішнього ключа.
mrdenny
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.