Créer des index uniques

  • par
  • 02/17/2017
  • 5 minutes de lecture
    • M
    • M
    • .

    • v
    • c
    • s
    • +1
  • S’applique à : ouiSQL Server (toutes les versions prises en charge) ouiAzure SQL Database

    Cette rubrique décrit comment créer un index unique sur une table dans SQL Server en utilisant SQL Server Management Studio ou Transact-SQL. Un index unique garantit que la clé d’index ne contient aucune valeur en double et que, par conséquent, chaque ligne de la table est d’une certaine manière unique. Il n’y a pas de 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êtes ne fait pas de différence entre un index unique créé par une contrainte ou créé manuellement. Cependant, la création d’une contrainte UNIQUE sur la colonne rend l’objectif de l’index clair. Pour plus d’informations sur les contraintes UNIQUE, voir Contraintes uniques et Contraintes de contrôle.

    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 dupliquées en ajoutant des données qui affectent plusieurs lignes (avec l’instruction INSERT), la ligne contenant un duplicata n’est pas ajoutée. Si elle est définie sur Non, l’ensemble de l’opération d’insertion échoue et toutes les données sont annulées.

    Note

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

    Dans ce sujet

    • Avant de commencer :

      Avantages d’un index unique

      Mises en œuvre typiques

      Limitations et restrictions

      Sécurité

    • Pour créer un index unique sur une table, en utilisant :

      SQL Server Management Studio

      Transact-SQL

    Avant de commencer

    Avantages d’un index unique

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

    • Pourvu que les données de chaque colonne soient uniques, vous pouvez créer à la fois un index unique clusterisé et plusieurs index uniques non clusterisés 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êtes qui peut produire des plans d’exécution plus efficaces.

    Mise en œuvre typique

    Les index uniques sont mis en œuvre de la manière suivante :

    • Contrainte PRIMARY KEY ou UNIQUE

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

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

      Pour plus d’informations, voir Contraintes uniques et contraintes de contrôle et Contraintes de clé primaire et étrangère.

    • Index indépendant d’une contrainte

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

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

    • Vue indexée

      Pour créer une vue indexée, un index clusterisé unique est défini sur une ou plusieurs colonnes de vue. 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 manière que les données de la table sont stockées dans un index clusterisé. Pour plus d’informations, voir 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 des valeurs de clé dupliquées existent dans les données.

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

    Sécurité

    Permissions

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

    Utilisation de SQL Server Management Studio

    Pour créer un index unique en utilisant le concepteur de table

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

  2. Développez le dossier Tables.

  3. Cliquez avec le bouton droit sur la table sur laquelle vous voulez créer un index unique et sélectionnez Conception.

  4. Dans le menu Concepteur de table, sélectionnez Indices/Clés.

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

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

  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 l’ellipse (…).

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

  10. Quand 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. Optionnel : dans la grille principale, sous Concepteur de table, sélectionnez Ignorer les clés dupliquées, puis choisissez Oui dans la liste. Faites-le si vous voulez 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 Nom_tableau_sauvegarde.

Créer un index unique en utilisant Object Explorer

  1. Dans Object Explorer, 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 de la souris sur le dossier Indexes, pointez sur New Index et sélectionnez Non-Clustered Index….

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

  6. Cochez la case Unique.

  7. Sous Colonnes clés de l’index, cliquez sur Ajouter…..

  8. Dans la boîte de dialogue Sélectionner les colonnes de nom_table, cochez la ou les cases de la ou des colonnes 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 Object Explorer, connectez-vous à une instance de Database Engine.

  2. Sur la barre standard, cliquez sur Nouvelle requête.

  3. Copier et coller l’exemple suivant dans la fenêtre de requête et cliquer 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, voir CREATE INDEX (Transact-SQL).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *