Existe-t-il une différence tangible entre un index cluster unique et une clé primaire cluster?

17

Je comprends qu'il peut y avoir une différence de sens ou d' intention entre les deux, mais existe-t-il des différences de comportement ou de performances entre une clé primaire en cluster et un index unique en cluster?

goric
la source

Réponses:

15

Une différence principale est que l'index unique peut avoir une valeur NULL qui n'est pas autorisée dans la clé primaire. Clustered ou non, c'est la principale différence entre l'implémentation pratique d'une clé primaire par rapport à une clé unique.

Oh, et le fait qu'une table peut avoir un PK et plusieurs UK :-).

Ce sont deux différences d'intention et non de PERFORMANCE. Sinon, je ne pense pas qu'il y ait de différence. Derrière tout PK ou UK, SQL Server construit un index (en fonction de la demande, en cluster ou non) et la façon dont il est utilisé est transparente pour la source.

Marian
la source
Il n'y a donc aucune raison d'utiliser un PK, sauf (A) comme alias pour NOT NULL UNIQUE CLUSTEREDou (B) pour souligner qu'un UQ particulier est "spécial" au sens des métadonnées, même si le RDMS est agnostique?
Jon of All Trades
Oui, quelque chose comme ça, je choisirais l'option B moi-même :-).
Marian
Il y a une raison - pour vous empêcher d'utiliser la valeur spéciale NULL là où elle est inappropriée!
JamesRyan
@JamesRyan: C'est couvert par la raison #A de Jon of All Trades.
Andriy M
1
@JamesRyan: Oui, entre PRIMARY KEYet NOT NULL UNIQUE, le premier serait beaucoup plus difficile à transformer NULL UNIQUE(en particulier si la contrainte était déjà référencée par une clé étrangère). Empêcherait certainement des changements accidentels de NOT NULLà NULL.
Andriy M
8

Entre une clé primaire en cluster et un index cluster unique, il n'y a pas de différence autre que l'index cluster unique peut avoir une valeur NULL.

Un index cluster non unique possède un uniqueificateur qui doit être traité pour les valeurs non uniques.

mrdenny
la source
Voulez-vous dire que d'autres index sur cette table pointent directement vers les lignes de l'index cluster en ignorant l'index créé par la clé primaire?
bernd_k
1
C'est exact. Les index non clusterisés pointeront vers la clé de clustering, pas la clé primaire. Si la clé primaire est une clé non clusterisée, tout ce qu'elle fait est d'imposer l'unicité sur une colonne qui ne prend pas en charge les valeurs NULL afin qu'elle puisse être utilisée via une clé étrangère.
mrdenny