Création d'index uniques

La création d'un index unique garantit l'échec de toute tentative de duplication de valeurs de clé. Il n'existe pas de différence notable entre la création d'une contrainte UNIQUE et la création d'un index unique indépendant de toute contrainte. La validation des données se produit d'une manière similaire et l'optimiseur de requête ne fait aucune distinction entre un index unique créé à partir d'une contrainte et un index unique créé manuellement. Il est toutefois conseillé de créer une contrainte UNIQUE sur une colonne lorsque l'intégrité des données doit être garantie. L'objectif de ce type d'index est donc évident.

Implémentations standard

Les index uniques sont implémentés à l'aide des méthodes suivantes :

  • Contrainte PRIMARY KEY ou UNIQUE
    La création d'une contrainte PRIMARY KEY entraîne la création automatique d'un index cluster unique sur la ou les colonnes pour autant qu'il n'existe pas encore d'index cluster dans la table ou qu'un index non-cluster unique n'ait pas été défini explicitement. La colonne de clé primaire n'accepte pas les valeurs NULL.
    La création d'une contrainte UNIQUE entraîne la création automatique d'un index non-cluster unique pour assurer l'application de la contrainte UNIQUE par défaut. Vous pouvez spécifier un index cluster unique pour autant qu'il n'existe pas encore d'index cluster dans la table.
    Pour plus d'informations, consultez Contraintes PRIMARY KEY et Contraintes UNIQUE.
  • Index indépendant de toute contrainte
    Vous pouvez définir plusieurs index non-cluster uniques dans une table.
    Pour plus d'informations, consultez CREATE INDEX (Transact-SQL).
  • Vue indexée
    Pour créer une vue indexée, vous devez définir un index cluster unique sur une ou plusieurs colonnes de vue. La vue en question est exécutée et l'ensemble de résultats est stocké au niveau feuille de l'index de la même manière que les données d'une table sont stockées dans un index cluster. Pour plus d'informations, consultez Création de vues indexées.

Résolution des problèmes de valeurs dupliquées

Les index uniques et les contraintes UNIQUE ne peuvent être créés qu'en présence de valeurs dupliquées dans les colonnes de clé. Par exemple, si vous voulez créer un index composite unique sur les colonnes FirstName et LastName, mais que deux des lignes de la table contiennent respectivement les valeurs 'Jane' et 'Smith' dans les colonnes FirstName et LastName , il est impossible de créer un index unique. Pour résoudre ce problème, procédez de l'une des façons suivantes :

  • Ajoutez ou supprimez des colonnes de la définition de l'index afin de créer un composite unique. Dans l'exemple précédent, l'ajout d'une colonne MiddleName à la définition de l'index pourrait résoudre le problème des valeurs dupliquées.
  • Lorsque les valeurs dupliquées sont issues d'erreurs de saisie des données, corrigez manuellement les données, puis créez l'index ou la contrainte.

Utilisation de l'option IGNORE_DUP_KEY pour le traitement des valeurs dupliquées

Vous pouvez activer (ON) ou désactiver (OFF) l'option IGNORE_DUP_KEY lors de la création ou de la modification d'un index unique ou d'une contrainte UNIQUE. Une fois l'index créé, cette option indique la réponse apportée au problème de valeurs dupliquées dans une instruction INSERT portant sur plusieurs lignes. Lorsque l'option IGNORE_DUP_KEY est désactivée (OFF), ce qui est le cas par défaut, le Moteur de base de données SQL Server 2005 rejette toutes les lignes de l'instruction INSERT si une ou plusieurs lignes contiennent des valeurs de clés dupliquées. Lorsque l'option est activée (ON), seules les lignes contenant les valeurs de clés dupliquées sont rejetées et des valeurs de clés non dupliquées sont ajoutées.

Par exemple, si une seule instruction insère 20 lignes dans une table comportant un index unique et que 10 de ces lignes contiennent des valeurs de clés dupliquées, l'ensemble des 20 lignes est rejeté par défaut. Toutefois, si l'option IGNORE_DUP_KEY est activée, seules les 10 valeurs de clés dupliquées sont rejetées, tandis que les 10 autres valeurs de clés non dupliquées sont insérées dans la table.

Le paramétrage de l'option est stocké dans les métadonnées de l'index. Pour afficher le paramétrage actuel, utilisez la vue de catalogue sys.indexes.

ms175132.note(fr-fr,SQL.90).gifRemarque :
L'option IGNORE_DUP_KEY ne peut être spécifiée pour un index créé dans une vue ou pour un index XML.

Traitement des valeurs NULL

À des fins d'indexation, les valeurs NULL sont comparées sur un pied d'égalité. Il est par conséquent impossible de créer un index unique ou une contrainte UNIQUE lorsque les valeurs de clés sont des valeurs NULL dans une ou plusieurs lignes. Lors de la sélection des colonnes d'un index unique ou d'une contrainte UNIQUE, sélectionnez donc les colonnes qui n'acceptent pas par définition les valeurs NULL.

Espace disque requis

La procédure de détermination de l'espace disque requis est identique à celle des index cluster et des index non-cluster. Pour plus d'informations sur l'espace disque requis pour les index, consultez Détermination de l'espace disque requis par les index.

Pour créer un index lors de la création d'une table

CREATE TABLE (Transact-SQL)

Pour créer un index sur une table existante

CREATE INDEX (Transact-SQL)

Voir aussi

Concepts

Taux de remplissage
Option index create memory
Modification des index
Placement d'index dans des groupes de fichiers
Contraintes PRIMARY KEY
Contraintes UNIQUE

Autres ressources

ALTER INDEX (Transact-SQL)
sys.indexes (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005