Création d'index avec colonnes incluses

Un index non cluster peut être élargi par l'ajout de colonnes non clés en plus des colonnes des clés d'index. Les colonnes non clés sont stockées au niveau feuille de l'arborescence binaire de l'index.

Les index avec colonnes non clés sont particulièrement intéressants lorsqu'ils couvrent la requête. Ceci signifie que les index incluent toutes les colonnes référencées par la requête. Pour plus d'informations, consultez Index avec colonnes incluses.

Espace disque requis

L'ajout de colonnes non clés entraîne une augmentation de l'espace disque nécessaire pour le stockage de l'index, a fortiori si les colonnes contiennent des données de type varchar(max), nvarchar(max), varbinary(max) ou xml, étant donné que les valeurs sont à la fois copiées dans le niveau feuille de l'index et conservées dans la table ou l'index cluster.

Le processus permettant de déterminer l'espace disque requis est le même qu'avec les index non-cluster. Pour plus d'informations, consultez Détermination de l'espace disque requis par les index.

Considérations relatives aux performances

Cette méthode améliore les performances des opérations de sélection car elle permet à l'optimiseur de requête de retrouver toutes les données dont il a besoin dans les colonnes de l'index sans devoir accéder à la table ou à l'index cluster. Cela dit, un nombre trop élevé de colonnes incluses peut entraîner un surplus de maintenance au niveau de l'index et ralentir les opérations d'insertion, de mise à jour ou de suppression dans la table ou la vue indexée sous-jacentes.

Exemples

A. Couverture d'une requête

L'exemple suivant crée un index non-cluster contenant quatre colonnes incluses sur la table Person.Address. La colonne de clés d'index est PostalCode et les colonnes non clés sont AddressLine1, AddressLine2, City, et StateProvinceID.

USE AdventureWorks;
GO
CREATE NONCLUSTERED INDEX IX_Address_PostalCode
ON Person.Address (PostalCode)
INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID);
GO

Cette requête sera couverte par l'index.

SELECT AddressLine1, AddressLine2, City, StateProvinceID, PostalCode
FROM Person.Address
WHERE PostalCode BETWEEN '98000' and '99999';
GO

B. Dépassement de la taille d'index limite

Dans l'exemple suivant, la clause INCLUDE de l'instruction CREATE INDEX est utilisée pour indexer les colonnes qui, normalement, dépasseraient la taille limite de colonne d'index, à savoir 900 octets. La table Production.ProductReview contient les colonnes suivantes : ProductID(int), ReviewerName(nvarchar (50)) et Comments (nvarchar (3850)). Ces colonnes sont fréquemment utilisées dans des requêtes, mais la colonne Comments est trop grande pour être une colonne de clés d'index. Toutefois, en utilisant la clause INCLUDE, vous pouvez l'ajouter dans l'index comme colonne non clé.

USE AdventureWorks;
GO
CREATE NONCLUSTERED INDEX IX_ProductReview_ProductID_ReviewerName
ON Production.ProductReview (ProductID, ReviewerName)
INCLUDE (Comments);
GO

Cette requête sera couverte par l'index.

SELECT Comments
FROM Production.ProductReview 
WHERE ProductID = 937;
GO

Pour créer un index avec des colonnes incluses