Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Colonne de clé d'index VS Colonne incluse d'index

Les colonnes de clé d'index font partie du b-tree de l'index. Les colonnes incluses ne le sont pas.

Prenez deux index :

CREATE INDEX index1 ON table1 (col1, col2, col3)
CREATE INDEX index2 ON table1 (col1) INCLUDE (col2, col3)

index1 convient mieux à ce type de requête :

SELECT * FROM table1 WHERE col1 = x AND col2 = y AND col3 = z

Alors que index2 convient mieux à ce type de requête :

SELECT col2, col3 FROM table1 WHERE col1 = x

Dans la première requête, index1 fournit un mécanisme pour identifier rapidement les lignes d'intérêt. La requête s'exécutera (probablement) comme une recherche d'index, suivie d'une recherche de signet pour récupérer la ou les lignes complètes.

Dans la deuxième requête, index2 agit comme un indice de couverture. SQL Server n'a pas du tout besoin d'accéder à la table de base, car l'index fournit toutes les données dont il a besoin pour satisfaire la requête. index1 pourrait également servir d'indice de couverture dans ce cas.

Si vous voulez un index de couverture, mais que vous ne voulez pas ajouter toutes les colonnes au b-tree parce que vous ne les recherchez pas, ou ne pouvez pas parce qu'elles ne sont pas un type de données autorisé (par exemple, XML), utilisez le Clause INCLUDE.