Vâng, câu hỏi đầu tiên là dễ dàng:
Khi một nhóm chỉ số nên được sử dụng?
Luôn. Giai đoạn. Ngoại trừ một số ít trường hợp hiếm gặp. Một chỉ số nhóm làm cho một bảng nhanh hơn, cho mọi hoạt động. VÂNG! Nó có. Xem xuất sắc của Kim Tripp The Clustered Index Debate continues để biết thông tin cơ bản.Cô cũng đề cập đến tiêu chí chính của mình cho một nhóm chỉ số:
- hẹp
- tĩnh (không bao giờ thay đổi)
- độc đáo
- nếu bao giờ có thể: ngày càng
INT SẮC đáp ứng này một cách hoàn hảo - GUID thì không. Xem GUID's as Primary Key để biết thông tin cơ bản mở rộng.
Tại sao thu hẹp? Vì khóa phân cụm được thêm vào mỗi trang chỉ mục của mỗi và mọi chỉ mục không nhóm trên cùng một bảng (để có thể thực sự tra cứu hàng dữ liệu, nếu cần). Bạn không muốn có VARCHAR (200) trong khóa phân cụm của mình ....
Tại sao độc đáo ?? Xem ở trên - khóa phân cụm là mục và cơ chế mà SQL Server sử dụng để tìm duy nhất một hàng dữ liệu. Nó phải là duy nhất. Nếu bạn chọn một khóa phân cụm không duy nhất, bản thân Máy chủ SQL sẽ thêm một bộ định danh 4 byte vào các khóa của bạn. Hãy cẩn thận về điều đó!
Tiếp theo: chỉ mục không được nhóm. Về cơ bản có một quy tắc: bất kỳ khoá ngoại nào trong bảng con tham chiếu đến một bảng khác sẽ được lập chỉ mục, nó sẽ tăng tốc độ JOIN và các hoạt động khác.
Hơn nữa, bất kỳ truy vấn nào có mệnh đề WHERE đều là một ứng cử viên tốt - hãy chọn những ứng dụng đầu tiên được thực thi rất nhiều. Đặt chỉ mục trên các cột hiển thị trong mệnh đề WHERE, trong các câu lệnh ORDER BY.
Tiếp theo: đo hệ thống của bạn, kiểm tra DMV (chế độ xem quản lý động) để biết gợi ý về chỉ mục không sử dụng hoặc bị thiếu và tinh chỉnh hệ thống của bạn lặp đi lặp lại. Đó là một quá trình liên tục, bạn sẽ không bao giờ được thực hiện! Xem here for info trên hai DMV đó (chỉ mục bị thiếu và không sử dụng).
Một từ cảnh báo khác: với một loạt tải chỉ mục, bạn có thể thực hiện bất kỳ truy vấn SELECT nào thực sự thực sự nhanh chóng. Nhưng đồng thời, INSERT, UPDATE và DELETEs phải cập nhật tất cả các chỉ số liên quan có thể bị ảnh hưởng. Nếu bạn chỉ bao giờ SELECT - đi hạt! Nếu không, đó là một hành động cân bằng tốt và tinh tế. Bạn luôn có thể tinh chỉnh một truy vấn đơn lẻ ngoài niềm tin - nhưng phần còn lại của hệ thống của bạn có thể bị ảnh hưởng khi làm như vậy. Không trên chỉ mục cơ sở dữ liệu của bạn! Đặt một vài chỉ số tốt tại chỗ, kiểm tra và quan sát cách hệ thống hoạt động, và sau đó có thể thêm một hoặc hai lần nữa, và một lần nữa: quan sát hiệu suất của toàn bộ hệ thống bị ảnh hưởng như thế nào.
"Có ok để có một chỉ mục trên một varchar hoặc datetime?" Tôi có một bảng nơi chỉ mục được nhóm trên datetime (mặc dù chúng tôi chỉ sử dụng phần ngày) vì tất cả truy vấn trên bảng bị giới hạn ở cặp ngày bắt đầu/kết thúc và tính chọn lọc của dữ liệu đủ cao để thực hiện nó là một lựa chọn tốt. – Tony