Nếu không có chỉ mục nhóm, bảng của bạn được sắp xếp thành một đống. Điều này có nghĩa là mỗi hàng được chèn sẽ được thêm vào trang dữ liệu ở cuối bảng. Cũng như các hàng được cập nhật, chúng được chuyển đến trang dữ liệu ở cuối bảng nếu dữ liệu được cập nhật lớn hơn trước.
Khi nó là tốt để không có một chỉ số clustered
Nếu bạn có một bảng cần chèn nhanh nhất có thể, nhưng có thể hy sinh bản cập nhật, và đọc tốc độ, sau đó không có một nhóm chỉ số có thể làm việc cho bạn. Một ví dụ sẽ là nếu bạn có một bảng đã được sử dụng như một hàng đợi, ví dụ, rất nhiều chèn mà sau này chỉ được đọc và chuyển sang một bảng khác.
Chỉ số Clustered
chỉ số Clustered tổ chức dữ liệu trong bảng của bạn dựa trên các cột trong clustered index. Nếu bạn cụm vào điều sai ví dụ một uniqueidentifier này có thể làm chậm những thứ xuống (xem dưới đây).
Miễn là chỉ mục nhóm của bạn là giá trị được sử dụng phổ biến nhất để tìm kiếm và nó là duy nhất và tăng chúng, bạn sẽ nhận được một số lợi ích hiệu suất tuyệt vời từ chỉ mục nhóm.Ví dụ: nếu bạn có bảng được gọi là USERS, nơi bạn thường tìm kiếm dữ liệu người dùng dựa trên USER_ID thì việc nhóm trên USER_ID sẽ tăng tốc hiệu suất của tất cả các lần tra cứu đó. Điều này chỉ đơn giản là làm giảm số lượng các trang dữ liệu cần được đọc để lấy dữ liệu của bạn.
Nếu bạn có quá nhiều khóa trong chỉ mục nhóm của bạn, điều này cũng có thể làm chậm mọi thứ.
Quy tắc chung cho chỉ mục nhóm:
Không cụm trên bất kỳ cột VARCHAR nào.
Clustering on INT IDENTITY cột thường là tốt nhất.
Cụm trên những gì bạn thường tìm kiếm.
Clustering trên UniqueIdentifiers
Với uniqueidentifiers trong một chỉ số, họ là cực kỳ không hiệu quả vì không có thứ tự sắp xếp tự nhiên. Dựa trên cấu trúc b-tree của chỉ mục bạn kết thúc với các chỉ mục cực kỳ phân mảnh khi sử dụng các bộ định danh duy nhất. Sau khi xây dựng lại hoặc tổ chức lại, chúng vẫn cực kỳ bị phân mảnh. Vì vậy, bạn kết thúc với một chỉ số chậm hơn, mà kết thúc lên được thực sự rất lớn trong bộ nhớ và trên đĩa do sự phân mảnh. Ngoài ra trên chèn của uniqueidentifier bạn có nhiều khả năng kết thúc với một phân chia trang trên chỉ mục do đó làm chậm chèn của bạn. Nói chung uniqueidentifiers là tin xấu cho các chỉ mục.
Tóm tắt
Tôi đề nghị là mỗi bảng cần phải có một chỉ số clustered trên đó trừ khi có một lý do thực sự tốt không (tức là bảng có chức năng như một hàng đợi).
Đây là câu hỏi có liên quan về [DBA-SE] (http://dba.stackexchange.com/) với một số thông tin và một vài liên kết nơi bạn có thể đọc tiếp. [Hiệu suất của các chỉ mục không được nhóm trên Heaps và các chỉ số được nhóm] (http://dba.stackexchange.com/questions/9829/performance-of-non-clustered-indexes-on-heaps-vs-clustered-indexes) –
Có lẽ là câu hỏi được trả lời tốt nhất bởi một người quen thuộc với cả Oracle và SQL Server. [dba.se] có thể là một vị trí tốt hơn cho việc này. –
Ngoài ra, bạn nên chuyển câu hỏi này sang dba.se. Nó có hai ý kiến và một câu trả lời (hoàn toàn trùng hợp ngẫu nhiên) từ các quy tắc DBA.SE mà không có bất kỳ áp phích nào khác thực sự chọn ra các chỉ số nhóm và IOT thực sự có sự khác biệt đáng kể. – ConcernedOfTunbridgeWells