Gibt es einen spürbaren Unterschied zwischen einem eindeutigen Clustered-Index und einem Clustered-Primärschlüssel?

17

Ich verstehe, dass es möglicherweise einen Unterschied in der Bedeutung oder Absicht zwischen den beiden gibt, aber gibt es Verhaltens- oder Leistungsunterschiede zwischen einem gruppierten Primärschlüssel und einem gruppierten eindeutigen Index?

goric
quelle

Antworten:

15

Ein Hauptunterschied besteht darin, dass der eindeutige Index einen NULL-Wert haben kann, der im Primärschlüssel nicht zulässig ist. Geclustert oder nicht, dies ist der Hauptunterschied zwischen der praktischen Implementierung eines Primärschlüssels und einem eindeutigen Schlüssel.

Oh, und die Tatsache, dass ein Tisch eine PK und viele UK haben kann :-).

Dies sind beide Unterschiede in der Absicht, nicht in der Leistung. Ansonsten glaube ich nicht, dass es einen Unterschied gibt. Hinter jedem PK oder UK erstellt der SQL Server einen Index (abhängig von der Anforderung, gruppiert oder nicht) und die Art und Weise, wie er verwendet wird, ist für die Quelle, von der er stammt, transparent.

Marian
quelle
Es gibt also keinen Grund, eine PK zu verwenden, außer (A) als Alias ​​für NOT NULL UNIQUE CLUSTEREDoder (B), um hervorzuheben, dass eine bestimmte UQ in einem Metadaten-Sinne "speziell" ist, obwohl das RDMS agnostisch ist.
Jon of All Trades
Ja, so etwas würde ich mir für Option B entscheiden :-).
Marian
Es gibt einen Grund - Sie daran zu hindern, den Sonderwert NULL zu verwenden, wenn dies unangemessen ist!
James Ryan
@JamesRyan: Das wird von Jon of All Trades Grund #A abgedeckt.
Andriy M
1
@JamesRyan: Ja, zwischen PRIMARY KEYund NOT NULL UNIQUEwäre das erstere viel schwieriger zu verwandeln NULL UNIQUE(insbesondere wenn die Einschränkung bereits von einem Fremdschlüssel referenziert wurde). Würde sicherlich versehentliche Änderungen von NOT NULLbis verhindern NULL.
Andriy M
8

Zwischen einem gruppierten Primärschlüssel und einem eindeutigen gruppierten Index gibt es keine Unterschiede, außer dass der eindeutige gruppierte Index einen NULL-Wert haben kann.

Ein nicht eindeutiger Clustered-Index verfügt über einen Uniqueifier, der für nicht eindeutige Werte behandelt werden muss.

mrdenny
quelle
Meinen Sie damit, dass weitere Indizes in dieser Tabelle direkt auf die Zeilen im Clustered-Index verweisen und den vom Primärschlüssel erstellten Index ignorieren?
bernd_k
1
Das ist richtig. Nicht geclusterte Indizes verweisen auf den Clustering-Schlüssel und nicht auf den Primärschlüssel. Wenn der Primärschlüssel ein nicht gruppierter Schlüssel ist, erzwingt er lediglich die Eindeutigkeit für eine Spalte, die keine NULL-Werte unterstützt, sodass er über einen Fremdschlüssel verwendet werden kann.
Mrdenny