Partager via


Créer des index uniques

Cette rubrique explique comment créer un index unique sur une table dans SQL Server 2014 à l’aide de SQL Server Management Studio ou de Transact-SQL. Un index unique garantit que la clé d'index ne contient aucune valeur dupliquée et que, par conséquent, chaque ligne de la table est unique d'une certaine manière. Il n’existe aucune différence significative entre la création d’une contrainte UNIQUE et la création d’un index unique indépendant d’une contrainte. La validation des données se produit de la même manière et l’optimiseur de requête ne fait pas la distinction entre un index unique créé par une contrainte ou créé manuellement. Toutefois, la création d’une contrainte UNIQUE sur la colonne rend l’objectif de l’index clair. Pour plus d’informations sur les contraintes UNIQUES, consultez Contraintes uniques et Contraintes de vérification.

Lorsque vous créez un index unique, vous pouvez définir une option pour ignorer les clés dupliquées. Si cette option est définie sur Oui et que vous tentez de créer des clés en double en ajoutant des données qui affectent plusieurs lignes (avec l’instruction INSERT), la ligne contenant un doublon n’est pas ajoutée. S’il est défini sur Non, l’opération d’insertion entière échoue et toutes les données sont restaurées.

Remarque

Vous ne pouvez pas créer un index unique sur une seule colonne si cette colonne contient NULL dans plusieurs lignes. De même, vous ne pouvez pas créer un index unique sur plusieurs colonnes si la combinaison de colonnes contient NULL dans plusieurs lignes. Ces valeurs sont traitées comme des valeurs dupliquées à des fins d’indexation.

Dans cette rubrique

Avant de commencer

Avantages d’un index unique

  • Les index uniques multicolumn garantissent que chaque combinaison de valeurs dans la clé d’index est unique. Par exemple, si un index unique est créé sur une combinaison de colonnes LastName, FirstName et MiddleName, aucune deux lignes de la table ne peuvent avoir la même combinaison de valeurs pour ces colonnes.

  • À condition que les données de chaque colonne soient uniques, vous pouvez créer à la fois un index cluster unique et plusieurs index non cluster uniques sur la même table.

  • Les index uniques garantissent l’intégrité des données des colonnes définies.

  • Les index uniques fournissent des informations supplémentaires utiles à l’optimiseur de requête qui peut produire des plans d’exécution plus efficaces.

Implémentations classiques

Les index uniques sont implémentés de la manière suivante :

  • Contrainte PRIMARY KEY ou UNIQUE

    Lorsque vous créez une contrainte PRIMARY KEY, un index cluster unique sur la colonne ou les colonnes est créé automatiquement si un index cluster sur la table n’existe pas déjà et que vous ne spécifiez pas d’index non cluster unique. La colonne clé primaire ne peut pas autoriser les valeurs NULL.

    Lorsque vous créez une contrainte UNIQUE, un index non cluster unique est créé pour appliquer une contrainte UNIQUE par défaut. Vous pouvez spécifier un index cluster unique si un index cluster sur la table n’existe pas déjà.

    Pour plus d’informations, consultez contraintes uniques et contraintes de vérification et contraintes de clé primaire et étrangère.

  • Index indépendant d’une contrainte

    Plusieurs index non cluster uniques peuvent être définis sur une table.

    Pour plus d’informations, consultez CREATE INDEX (Transact-SQL).

  • Vue indexée

    Pour créer une vue indexée, un index cluster unique est défini sur une ou plusieurs colonnes d’affichage. La vue est exécutée et le jeu de résultats est stocké dans le niveau feuille de l’index de la même façon que les données de table sont stockées dans un index cluster. Pour plus d’informations, consultez Créer des vues indexées.

Limitations et restrictions

  • Un index unique, une contrainte UNIQUE ou une contrainte PRIMARY KEY ne peuvent pas être créés si les données comportent des valeurs de clé dupliquées.

  • Un index non cluster unique peut contenir des colonnes non-clés incluses. Pour plus d’informations, consultez Créer des index avec colonnes incluses.

Sécurité

Autorisations

Nécessite l’autorisation ALTER sur la table ou la vue. L’utilisateur doit être membre du rôle serveur fixe sysadmin ou des rôles de base de données fixes db_ddladmin et db_owner .

Utilisation de SQL Server Management Studio

Pour créer un index unique à l’aide du Concepteur de tables

  1. Dans l’Explorateur d’objets, développez la base de données qui contient la table sur laquelle vous souhaitez créer un index unique.

  2. Développez le dossier Tables .

  3. Cliquez avec le bouton droit sur la table sur laquelle vous souhaitez créer un index unique, puis sélectionnez Création.

  4. Dans le menu Concepteur de tables , sélectionnez Index/Clés.

  5. Dans la boîte de dialogue Index/Clés , cliquez sur Ajouter.

  6. Sélectionnez le nouvel index dans la zone de texte Clé primaire/Unique sélectionnée ou Index .

  7. Dans la grille principale, sous (Général), sélectionnez Type , puis choisissez Index dans la liste.

  8. Sélectionnez Colonnes, puis cliquez sur les points de suspension (...).

  9. Dans la boîte de dialogue Colonnes d’index , sous Nom de colonne, sélectionnez les colonnes à indexer. Vous pouvez sélectionner jusqu’à 16 colonnes. Pour des performances optimales, sélectionnez une ou deux colonnes par index. Pour chaque colonne que vous sélectionnez, indiquez si l’index organise les valeurs de cette colonne dans l’ordre croissant ou décroissant.

  10. Lorsque toutes les colonnes de l’index sont sélectionnées, cliquez sur OK.

  11. Dans la grille, sous (Général), sélectionnez Est unique , puis choisissez Oui dans la liste.

  12. Facultatif : dans la grille principale, sous Concepteur de tables, sélectionnez Ignorer les clés dupliquées , puis choisissez Oui dans la liste. Procédez ainsi si vous souhaitez ignorer les tentatives d’ajout de données qui créeraient une clé en double dans l’index unique.

  13. Cliquez sur Fermer.

  14. Dans le menu Fichier , cliquez sur Enregistrertable_name.

Créer un index unique à l’aide de l’Explorateur d’objets

  1. Dans l’Explorateur d’objets, développez la base de données qui contient la table sur laquelle vous souhaitez créer un index unique.

  2. Développez le dossier Tables .

  3. Développez la table sur laquelle vous souhaitez créer un index unique.

  4. Cliquez avec le bouton droit sur le dossier Index , pointez sur Nouvel index, puis sélectionnez Index non cluster....

  5. Dans la boîte de dialogue Nouvel index , dans la page Général , entrez le nom du nouvel index dans la zone Nom de l’index .

  6. Cochez la case Unique .

  7. Sous Colonnes clés d’index, cliquez sur Ajouter....

  8. Dans la boîte de dialogue Sélectionner des colonnes du tableautable_name, activez la case à cocher ou les cases à cocher pour les colonne(s) de la table à ajouter à l’index unique.

  9. Cliquez sur OK.

  10. Dans la boîte de dialogue Nouvel index , cliquez sur OK.

Utilisation de Transact-SQL

Pour créer un index unique sur une table

  1. Dans l' Explorateur d'objets, connectez-vous à une instance du Moteur de base de données.

  2. Dans la barre d'outils standard, cliquez sur Nouvelle requête.

  3. Copiez et collez l'exemple suivant dans la fenêtre de requête, puis cliquez sur Exécuter.

    USE AdventureWorks2012;  
    GO  
    -- Find an existing index named AK_UnitMeasure_Name and delete it if found  
    IF EXISTS (SELECT name from sys.indexes  
               WHERE name = N'AK_UnitMeasure_Name')   
       DROP INDEX AK_UnitMeasure_Name ON Production.UnitMeasure;   
    GO  
    -- Create a unique index called AK_UnitMeasure_Name  
    -- on the Production.UnitMeasure table using the Name column.  
    CREATE UNIQUE INDEX AK_UnitMeasure_Name   
       ON Production.UnitMeasure (Name);   
    GO  
    

Pour plus d’informations, consultez CREATE INDEX (Transact-SQL).