Dans SQL Server, les colonnes de clé d'index cluster sont toujours ajoutées à l'index non cluster pour agir comme un localisateur de lignes (Réf: En savoir plus sur les clés d'index non cluster ).
Pour un NCI déclaré comme unique, ils sont ajoutés en tant que colonne incluse, sinon ils sont ajoutés à la fin de la clé.
Vous souhaiterez peut-être ajouter les colonnes explicitement si l'emplacement par défaut n'est pas optimal pour vos requêtes. Par exemple, si vous souhaitez contrôler la direction ASC
/ DESC
ou si vous souhaitez contrôler la position des colonnes clés dans l'index.
CREATE TABLE T
(
A INT,
B INT,
C INT ,
PRIMARY KEY CLUSTERED (B DESC, C DESC)
)
/*Implicitly adds B DESC, C DESC to end of key*/
CREATE NONCLUSTERED INDEX ix1 ON T(A ASC)
/*No sort operation*/
SELECT *
FROM T
ORDER BY A ASC,B DESC, C DESC
/*
But the avove index won't be able to seek into A,C
and will need a residual predicate after seeking into A.
For the following query
*/
SELECT *
FROM T
WHERE A=1 AND C > 4
ORDER BY C ASC, B DESC
/*This index explicitly controlling the key column position
and direction would be better*/
CREATE NONCLUSTERED INDEX ix2 ON T(A ASC, C ASC, B DESC)