Trong SQL Server, (các) cột khóa chỉ mục được phân cụm luôn được thêm vào chỉ mục không được phân cụm để hoạt động như một trình định vị hàng (Tham khảo: Thông tin thêm về Khóa chỉ mục không tách rời ).
Đối với NCI được khai báo là duy nhất, chúng được thêm dưới dạng cột được bao gồm nếu không chúng được thêm vào cuối khóa.
Bạn có thể muốn thêm các cột một cách rõ ràng nếu vị trí mặc định không tối ưu cho các truy vấn của bạn. Ví dụ: nếu bạn muốn điều khiển ASC
/ DESC
direction hoặc bạn muốn kiểm soát vị trí của các cột chính trong chỉ mục.
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)