Créer des index avec colonnes inclusesCreate Indexes with Included Columns

Cette rubrique s’applique à : OuiSQL ServerOuibase de données SQL AzureaucunAzure SQL Data Warehouse aucun Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Cette rubrique explique comment ajouter des colonnes incluses (ou non-clés) pour étendre les fonctionnalités des index non cluster dans SQL ServerSQL Server à l'aide de SQL Server Management StudioSQL Server Management Studio ou de Transact-SQLTransact-SQL.This topic describes how to add included (or nonkey) columns to extend the functionality of nonclustered indexes in SQL ServerSQL Server by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. L'inclusion de colonnes non-clés permet de créer des index non-cluster qui couvrent davantage de requêtes.By including nonkey columns, you can create nonclustered indexes that cover more queries. En effet, les colonnes non-clés présentent les avantages suivants :This is because the nonkey columns have the following benefits:

  • Elles peuvent contenir des types de données qui ne sont pas autorisés dans les colonnes de clés d'index.They can be data types not allowed as index key columns.

  • Elles ne sont pas prises en compte par le Moteur de base de donnéesDatabase Engine lors du calcul du nombre de colonnes clés d'index ou de la taille de la clé d'index.They are not considered by the Moteur de base de donnéesDatabase Engine when calculating the number of index key columns or index key size.

    Un index contenant des colonnes non-clés peut améliorer considérablement les performances des requêtes lorsque toutes les colonnes de la requête sont incluses dans l'index en tant que colonnes clés ou non-clés.An index with nonkey columns can significantly improve query performance when all columns in the query are included in the index either as key or nonkey columns. Les gains de performances sont dus au fait que l'optimiseur de requête peut localiser toutes les valeurs des colonnes dans l'index ; l'accès aux données de table et d'index n'a pas lieu, produisant ainsi un nombre moindre d'opérations d'E/S sur le disque.Performance gains are achieved because the query optimizer can locate all the column values within the index; table or clustered index data is not accessed resulting in fewer disk I/O operations.

Note

Quand un index contient toutes les colonnes auxquelles une requête fait référence, on dit qu’il couvre la requête.When an index contains all the columns referenced by a query it is typically referred to as covering the query.

Dans cette rubriqueIn This Topic

Avant de commencerBefore You Begin

Recommandations relatives à la conceptionDesign Recommendations

  • La conception d'index non-cluster doit être réalisée avec une clé d'index de grande taille, de sorte que seules les colonnes utilisées pour la recherche sont les colonnes clés.Redesign nonclustered indexes with a large index key size so that only columns used for searching and lookups are key columns. Toutes les autres colonnes qui couvrent la requête doivent être des colonnes non-clés.Make all other columns that cover the query into nonkey columns. De cette manière, vous disposez de toutes les colonnes nécessaires pour couvrir la requête, mais la clé d'index elle-même est petite et efficace.In this way, you will have all columns needed to cover the query, but the index key itself is small and efficient.

  • Incluez les colonnes non clés dans un index non cluster pour éviter de dépasser les limitations actuelles de taille d’index, établies à 32 colonnes clés au maximum et à une taille de clé d’index maximale de 1 700 octets (16 colonnes clés et 900 octets avant SQL Server 2016SQL Server 2016).Include nonkey columns in a nonclustered index to avoid exceeding the current index size limitations of a maximum of 32 key columns and a maximum index key size of 1,700 bytes (16 key columns and 900 bytes prior to SQL Server 2016SQL Server 2016). Le Moteur de base de donnéesDatabase Engine ne tient pas compte des colonnes non-clés lors du calcul du nombre de colonnes clés d'index ou de la taille de la clé d'index.The Moteur de base de donnéesDatabase Engine does not consider nonkey columns when calculating the number of index key columns or index key size.

Limitations et restrictionsLimitations and Restrictions

  • Les colonnes non-clés peuvent uniquement être définies sur des index non cluster.Nonkey columns can only be defined on nonclustered indexes.

  • Tous les types de données, à l'exception de text, de ntextet de image , peuvent être utilisés en tant que colonnes non-clés.All data types except text, ntext, and image can be used as nonkey columns.

  • Les colonnes calculées déterministes et précises ou imprécises peuvent être des colonnes non-clés.Computed columns that are deterministic and either precise or imprecise can be nonkey columns. Pour plus d'informations, consultez Indexes on Computed Columns.For more information, see Indexes on Computed Columns.

  • Les colonnes calculées dérivées des types de données image, ntextet text peuvent être des colonnes non-clés tant que le type de données de la colonne calculée est autorisé en tant que colonne d'index non-clé.Computed columns derived from image, ntext, and text data types can be nonkey columns as long as the computed column data type is allowed as a nonkey index column.

  • Les colonnes non-clés ne peuvent pas être supprimées d'une table, sauf si l'index de cette table est d'abord supprimé.Nonkey columns cannot be dropped from a table unless that table’s index is dropped first.

  • Les colonnes non-clés ne peuvent pas être modifiées, sauf pour effectuer les opérations suivantes :Nonkey columns cannot be changed, except to do the following:

    • modifier la possibilité de valeur NULL de la colonne de NOT NULL à NULL ;Change the nullability of the column from NOT NULL to NULL.

    • augmenter la longueur des colonnes varchar, nvarcharou varbinary .Increase the length of varchar, nvarchar, or varbinary columns.

SécuritéSecurity

AutorisationsPermissions

Nécessite une autorisation ALTER sur la table ou la vue.Requires ALTER permission on the table or view. 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 .User must be a member of the sysadmin fixed server role or the db_ddladmin and db_owner fixed database roles.

Utilisation de SQL Server Management StudioUsing SQL Server Management Studio

Pour créer un index avec des colonnes non-clésTo create an index with nonkey columns

  1. Dans l'Explorateur d'objets, cliquez sur le signe plus (+) pour développer la base de données qui contient la table sur laquelle vous souhaitez créer un index avec des colonnes non-clés.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to create an index with nonkey columns.

  2. Cliquez sur le signe plus (+) pour développer le dossier Tables .Click the plus sign to expand the Tables folder.

  3. Cliquez sur le signe plus (+) pour développer la table sur laquelle vous souhaitez créer un index avec des colonnes non-clés.Click the plus sign to expand the table on which you want to create an index with nonkey columns.

  4. Cliquez avec le bouton droit sur le dossier Indexes , pointez sur Nouvel index, puis sélectionnez Index non cluster….Right-click the Indexes folder, point to New Index, and select Non-Clustered Index….

  5. Dans la boîte de dialogue Nouvel index , sur la page Général , entrez le nom du nouvel index dans la zone Nom de l'index .In the New Index dialog box, on the General page, enter the name of the new index in the Index name box.

  6. Sous l'onglet Colonnes de clés d'index , cliquez sur Ajouter….Under the Index key columns tab, click Add….

  7. Dans la boîte de dialogue Sélectionnez les colonnes à partir denom_table , cochez la ou les cases correspondant à la ou aux colonnes de table à ajouter à l’index.In the Select Columns fromtable_name dialog box, select the check box or check boxes of the table column or columns to be added to the index.

  8. Cliquez sur OK.Click OK.

  9. Sous l'onglet Colonnes incluses , cliquez sur Ajouter….Under the Included columns tab, click Add….

  10. Dans la boîte de dialogue Sélectionnez les colonnes à partir denom_table , cochez la ou les cases de la ou des colonnes de table à ajouter à l’index en tant que colonnes non-clés.In the Select Columns fromtable_name dialog box, select the check box or check boxes of the table column or columns to be added to the index as nonkey columns.

  11. Cliquez sur OK.Click OK.

  12. Dans la boîte de dialogue Nouvel index , cliquez sur OK.In the New Index dialog box, click OK.

Utilisation de Transact-SQLUsing Transact-SQL

Pour créer un index avec des colonnes non-clésTo create an index with nonkey columns

  1. Dans l' Explorateur d'objets, connectez-vous à une instance du Moteur de base de donnéesDatabase Engine.In Object Explorer, connect to an instance of Moteur de base de donnéesDatabase Engine.

  2. Dans la barre d'outils standard, cliquez sur Nouvelle requête.On the Standard bar, click New Query.

  3. Copiez et collez l'exemple suivant dans la fenêtre de requête, puis cliquez sur Exécuter.Copy and paste the following example into the query window and click Execute.

    USE AdventureWorks2012;  
    GO  
    -- Creates a nonclustered index on the Person.Address table with four included (nonkey) columns.   
    -- index key column is PostalCode and the nonkey columns are  
    -- AddressLine1, AddressLine2, City, and StateProvinceID.  
    CREATE NONCLUSTERED INDEX IX_Address_PostalCode  
    ON Person.Address (PostalCode)  
    INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID);  
    GO  
    

    Pour plus d’informations, consultez CREATE INDEX (Transact-SQL).For more information, see CREATE INDEX (Transact-SQL).