En SQL Server, las columnas de clave de índice agrupadas siempre se agregan al índice no agrupado para actuar como un localizador de filas (Ref: Más sobre claves de índice no agrupadas ).
Para un NCI declarado como único, se agregan como una columna incluida; de lo contrario, se agregan al final de la clave.
Es posible que desee agregar las columnas explícitamente si la ubicación predeterminada no es óptima para sus consultas. Por ejemplo, si desea controlar la dirección ASC
/ DESC
o desea controlar la posición de las columnas clave en el índice.
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)