Cần thiết để bao gồm các cột chỉ mục cụm trong các chỉ mục không phân cụm?


15

Xem xét rằng một chỉ mục không được phân cụm dựa trên chỉ mục được phân cụm, liệu chỉ số không được phân cụm có thể liệt kê bất kỳ cột nào có trong chỉ mục được phân cụm không?

Nói cách khác, nếu bảng Sản phẩm có chứa một chỉ mục được nhóm trên ProductID, khi tạo một chỉ mục không được phân cụm, trong đó có thể nên đưa vào cột ProductID, dù sao cũng cần thêm nó vào một cột?

Nếu không, có kịch bản nào để thêm tên cột vào chỉ mục không được nhóm không?

Câu trả lời:


19

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/ DESCdirection 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) 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.