88

Tôi biết sự khác biệt chính giữa các chỉ mục nhóm và không nhóm và có hiểu biết về cách chúng thực sự hoạt động. Tôi hiểu cách chỉ mục nhóm và không được nhóm lại cải thiện hiệu suất đọc. Nhưng có một điều tôi không chắc chắn là những gì sẽ là lý do mà tôi sẽ chọn một trong những khác.Máy chủ SQL - Khi nào sử dụng Chỉ mục nhóm và không được nhóm?

Ví dụ: Nếu một bảng không có một chỉ số clustered, ta nên tạo ra một chỉ số không clustered và whats lợi ích của làm

+3

Cám ơn đáp ứng. Tôi đã nhận thức được điều đó.Câu hỏi của tôi là sẽ có một tình huống mà việc tạo ra một chỉ số không nhóm sẽ có lợi nhiều hơn việc tạo ra một chỉ số nhóm – armulator

+2

Có, bạn nên tránh một chỉ số nhóm khi; cột có cardinality thấp, không có thứ tự cụ thể, thường xuyên cập nhật, không tuần tự, nó là một tổng hợp của nhiều cột ... –

+0

Cảm ơn câu trả lời của bạn. Hữu ích của nó – armulator

Trả lời

105

Tôi chỉ muốn đưa vào một lời cảnh báo: xin vui lòng rất cẩn thận chọn chỉ mục nhóm của bạn! Mỗi bảng dữ liệu "thông thường" phải có chỉ số nhóm, vì có chỉ số nhóm thực sự tăng tốc rất nhiều hoạt động - có, tăng tốc, thậm chí chèn và xóa! Nhưng chỉ khi bạn chọn một chỉ số nhóm tốt.

Đó là cấu trúc dữ liệu được sao chép nhiều nhất trong cơ sở dữ liệu SQL Server của bạn. Khóa phân cụm cũng sẽ là một phần của mỗi chỉ mục không được nhóm trên bảng của bạn.

Bạn nên sử dụng cẩn thận khi chọn một chìa khóa phân nhóm - nó phải là:

  • hẹp (4 byte lý tưởng)

  • độc đáo (đó là "con trỏ hàng" sau Nếu bạn không làm cho nó độc đáo SQL Server sẽ làm điều đó cho bạn trong nền, chi phí cho bạn một vài byte cho mỗi lần nhập số lượng hàng và số lượng chỉ số nonclustered bạn có - điều này có thể rất tốn kém!)

  • tĩnh (không bao giờ thay đổi - nếu có thể)

  • lý tưởng ngày càng tăng vì vậy bạn sẽ không kết thúc với sự phân mảnh chỉ số khủng khiếp (một GUID là toàn trái ngược với một chìa khóa phân nhóm tốt - cho mà lý do cụ thể)

  • nó nên không nullable và lý tưởng rộng cũng cố định - một varchar(250) làm cho một phân nhóm rất nghèo chính

.210

Bất cứ điều gì khác thực sự cần được mức độ thứ hai và thứ ba có tầm quan trọng đằng sau những điểm ....

Xem một số Kimberly Tripp (The Queen of Indexing) bài đăng trên blog về chủ đề này - bất cứ điều gì cô đã viết trên blog của mình là hoàn toàn vô giá - đọc nó, tiêu hóa nó - sống theo nó!

+1

Cảm ơn marc_s vì lời giải thích rõ ràng. Nhưng về mặt kỹ thuật, chỉ số 'không nhóm 'làm gì cho chúng ta. tầm quan trọng của nó là gì ..? – BNN

+0

@nad: chỉ mục không được nhóm lại có thể tăng tốc tìm kiếm của bạn - thay vì phải so sánh hàng triệu hàng dữ liệu với tiêu chí tìm kiếm của bạn, bạn có thể tìm thấy một hàng nhất định chỉ với 4, 5 so sánh. Điều đó tạo nên một sự khác biệt *** HUGE! –

+0

@marc_s Tại sao nó tăng tốc hiệu suất khi chèn? – MuriloKunze