In SQL Server werden die Spalten mit dem gruppierten Indexschlüssel immer zum nicht gruppierten Index hinzugefügt, um als Zeilenlokator zu fungieren ( siehe : Weitere Informationen zu nicht gruppierten Indexschlüsseln ).
Für eine als eindeutig deklarierte NCI werden sie als eingeschlossene Spalte hinzugefügt, andernfalls werden sie am Ende des Schlüssels hinzugefügt.
Möglicherweise möchten Sie die Spalten explizit hinzufügen, wenn die Standardplatzierung für Ihre Abfragen nicht optimal ist. Zum Beispiel, wenn Sie die Richtung ASC
/ DESC
oder die Position der Schlüsselspalten im Index steuern möchten.
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)