51 votes

La clé unique SQL Server est-elle également un index?

J'ai une colonne dans une table (par exemple, UserName) que je veux être sûr d'être unique. Je crée donc une clé unique pour cette colonne et l'appelle IX_Users_UserName.

Maintenant, si je recherche souvent des utilisateurs en fonction de leur nom d'utilisateur, je veux m'assurer qu'il existe un index pour ce champ.

Dois-je créer un index distinct ou la clé unique est-elle également considérée comme un index, tout comme la clé primaire est une clé unique en cluster?

40voto

tvanfosson Points 268301

Unique Clé: Clé Unique applique l'unicité de la colonne sur laquelle ils sont définis. Clé Unique crée un index non ordonné en clusters sur la colonne. Clé Unique permet à une seule Valeur NULL.

L'instruction Alter table pour ajouter de la contrainte unique la colonne:

ALTER TABLE des Auteurs ADD CONSTRAINT IX_Authors_Name UNIQUE(Nom) ALLER

Source

Plus d'informations à partir de MSDN.

FWIW -- si votre contrainte de ne pas créer un index, je voudrais éviter de le nommer IX_ que celle qui serait généralement supposé être associé à un (IX = Index).

20voto

marc_s Points 321990

Fondamentalement, SQL Server, une contrainte unique est en effet réalisé par le biais d'un index unique.

Les différences entre une contrainte UNIQUE et un INDEX UNIQUE sont assez subtiles, vraiment. Si vous créez un INDEX UNIQUE, vous pouvez faire référence qu'à une contrainte de clé étrangère d'une autre table (ne fonctionne pas si vous créer une contrainte UNIQUE....).

Alors, quelle est la différence? Bien une contrainte unique est vraiment plus d'une chose logique sur une table que vous souhaitez exprimer l'intention que le contenu d'une colonne donnée (ou d'un groupe de colonnes) est unique.

Un index unique (comme la plupart des indices) est plus de "derrière-le-scènes" détail de l'implémentation.

De mon point de vue, sauf si vous avez vraiment un problème avec ça, j'avais toujours l'utilisation d'un INDEX UNIQUE - l'avantage de faire partie d'une contrainte d'intégrité référentielle est tout à fait valable et peut être très utile dans certains cas. Fonctionnellement, dans la pratique, il n'y a pas de différence entre l'utilisation d'une Contrainte Unique vs Index Unique, vraiment.

1voto

derobert Points 26258

Une clé unique est un index dans presque tous les produits de base de données. Cela doit être le cas, sinon la base de données aurait du mal à l'appliquer: lorsque vous insérez une valeur, la base de données doit répondre, "cette valeur existe-t-elle déjà?" La meilleure façon de le faire est de consulter un index.

Je n'ai pas de serveur SQL devant moi pour tester, mais je serais choqué si ce n'était pas le cas.

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