Dalam SQL Server kolom indeks kunci berkerumun selalu ditambahkan ke indeks tidak berkerumun untuk bertindak sebagai pencari baris (Ref: Lebih Banyak Tentang Tombol Indeks Tidak Tertutup ).
Untuk NCI yang dinyatakan unik, mereka akan ditambahkan sebagai kolom yang disertakan jika tidak ditambahkan ke akhir kunci.
Anda mungkin ingin menambahkan kolom secara eksplisit jika penempatan default tidak optimal untuk kueri Anda. Misalnya jika Anda ingin mengontrol ASC
/ DESC
arah atau Anda ingin mengontrol posisi kolom kunci dalam indeks.
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)