Types de requêtes et index

Lorsque vous déterminez s'il convient de créer un index sur une colonne, évaluez comment la colonne est utilisée dans les requêtes. Le tableau suivant décrit les types de requêtes pour lesquels des index sont utiles.

Notes

Les exemples du tableau reposent sur l'exemple de base de données AdventureWorks2008R2. Lorsque vous exécutez les exemples dans SQL Server Management Studio, vous pouvez consulter les index qui sont sélectionnés par l'optimiseur de requête en affichant le plan d'exécution réel. Pour plus d'informations, consultez Procédure : afficher un plan d'exécution réel.

Requête dans laquelle le prédicat de colonne est l'un d'eux

Description de la requête et exemple

Index à envisager

Concordance exacte pour une valeur spécifique

Recherche une concordance exacte dans laquelle la requête utilise la clause WHERE pour spécifier une entrée de colonne avec une valeur spécifique. Exemple :

SELECT BusinessEntityID, JobTitle 
FROM HumanResources.Employee 
WHERE BusinessEntityID = 228; 

Index cluster ou non-cluster sur la colonne BusinessEntityID.

Concordance exacte pour une valeur dans une liste IN (x,y,z)

Recherche une concordance exacte pour une valeur dans une liste de valeurs spécifiée. Exemple :

SELECT BusinessEntityID, JobTitle 
FROM HumanResources.Employee 
WHERE BusinessEntityID IN (288, 30, 15);

Index cluster ou non-cluster sur la colonne BusinessEntityID.

Plage de valeurs

Recherche une plage de valeurs dans laquelle la requête spécifie une entrée possédant une valeur comprise entre deux valeurs. Exemple :

SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID BETWEEN 1 and 5;

ou

WHERE ProductModelID >= 1 AND ProductModelID <= 5

Index cluster ou non-cluster sur la colonne ProductModelID.

Jointure entre des tables

Recherche des lignes dans une table correspondant à une ligne dans une autre table en fonction d'un prédicat de jointure. Exemple :

SELECT a.ProductAssemblyID, b.Name, a.PerAssemblyQty
FROM Production.BillOfMaterials AS a
JOIN Production.Product AS b 
ON a.ProductAssemblyID = b.ProductID
WHERE b.ProductID = 900;

Index cluster ou non-cluster sur les colonnes ProductID et ProductAssemblyID.

LIKE, comparaison

Recherche des lignes correspondantes qui commencent par une chaîne de caractères spécifique telle que « abc% ». Exemple :

SELECT CountryRegionCode, Name 
FROM Person.CountryRegion 
WHERE Name LIKE N'D%'

Index cluster ou non-cluster sur la colonne Name.

Trié ou agrégé

Nécessite un ordre de tri implicite ou explicite ou une agrégation (GROUP BY). Exemple :

SELECT a.WorkOrderID, b.ProductID, a.OrderQty, a.DueDate 
FROM Production.WorkOrder AS a
JOIN Production.WorkOrderRouting AS b 
ON a.WorkOrderID = b.WorkOrderID
ORDER BY a.WorkOrderID;

Index cluster ou non-cluster sur la colonne triée ou agrégée.

Pour le tri, envisagez de spécifier l'ordre ASC ou DESC de la colonne.

Contrainte PRIMARY KEY ou UNIQUE

Recherche les doublons des nouvelles valeurs de clé d'index au cours d'opérations d'insertion et de mise à jour, pour garantir l'intégrité des contraintes PRIMARY KEY et UNIQUE. Exemple :

INSERT INTO Production.UnitMeasure (UnitMeasureCode, Name, ModifiedDate)
VALUES ('OZ1', 'OuncesTest', GetDate());

Index cluster ou non-cluster sur les colonnes définies dans la contrainte.

Opération UPDATE ou DELETE dans une relation PRIMARY KEY/FOREIGN KEY

Recherche des lignes dans une opération de mise à jour ou de suppression dans laquelle la colonne fait partie d'une relation PRIMARY KEY/FOREIGN KEY, avec ou sans l'option CASCADE.

Index cluster ou non-cluster sur la colonne de clé étrangère.

La colonne est dans la liste de sélection mais pas dans le prédicat.

Contient une ou plusieurs colonnes dans la liste de sélection qui ne sont pas utilisées pour les recherches. Exemple :

SELECT Title, Revision, FileName
FROM Production.Document
WHERE Title LIKE N'%Maintenance%' AND Revision >= 0';

Index non-cluster avec FileName spécifié dans la clause INCLUDE.