28 votes

Contrainte unique vs index unique

Je souhaite savoir quelle technique les développeurs préfèrent utiliser pour appliquer l'unicité dans SQL Server: UNIQUE CONSTRAINT ou UNIQUE INDEX. Étant donné qu'il y a peu de différence dans la mise en œuvre physique de chacun, comment décidez-vous lequel est le meilleur?

Y a-t-il d'autres raisons que les performances pour évaluer la meilleure solution?

Y a-t-il des avantages de gestion de base de données pour l'un ou pour l'autre?

18voto

OMG Ponies Points 144785

Cet article MSDN en comparant les deux, c'est pour SQL Server 2000: http://msdn.microsoft.com/en-us/library/aa224827(SQL.80).aspx

Pour la plupart des fins, il n'y a pas de différence - la contrainte est implémenté sous la forme d'un index sous les couvertures. Et si il y a la possibilité de désactiver la contrainte, il ne fait pas travailler dans SQL Server.

Il importe seulement si vous souhaitez modifier des choses comme les taux de remplissage, etc pour la façon dont vous souhaitez mettre en œuvre la contrainte d'unicité.

SQL Server 2008+ ajout INCLUDE à fournir plus efficace couvrant l'index. Index filtrés = contrainte unique sur un sous-ensemble de lignes/ignorer les multiples null etc.

14voto

Jeff Meatball Yang Points 12021

Ils sont pas significativement différentes. Lorsque vous créez une contrainte unique, SQL Server crée automatiquement un index unique pour vous.

Avec la syntaxe de création d'un index, vous pouvez avoir un meilleur contrôle de la définition d'un index unique pour spécifier cluster/cluster, des colonnes incluses, groupe de fichiers, l'indice de filtrage (SqlSvr2008), etc.

Une contrainte est préférable dans la plupart des cas parce qu'il exprime l'intention de l'unicité: c'est une contrainte. Un indice ne transmettent pas cette intention.

Comme pour la facilité de gestion, l'impact est minime. Vous pouvez gérer l'index (reconstruction, réorganisation) comme si elle avait été créée, indépendamment de la contrainte. La seule différence est que la contrainte dépend de l'index, et donc à supprimer l'index, vous devez également supprimer la contrainte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X