Sự khác biệt giữa chỉ mục được phân cụm và không được phân cụm là chỉ mục được phân cụm xác định thứ tự vật lý của các hàng trong cơ sở dữ liệu . Nói cách khác, áp dụng chỉ mục nhóm cho PersonId
có nghĩa là các hàng sẽ được sắp xếp vật lý theo PersonId
trong bảng, cho phép tìm kiếm chỉ mục trên này đi thẳng đến hàng (thay vì chỉ mục không theo nhóm, sẽ hướng bạn đến vị trí của hàng, thêm một bước).
Điều đó nói rằng, nó không bình thường để khóa chính không phải là chỉ mục nhóm, nhưng không phải là không có. Vấn đề với kịch bản của bạn thực sự ngược lại với những gì bạn đang giả định:bạn muốn duy nhất các giá trị trong một chỉ mục được nhóm lại, không phải các giá trị trùng lặp. Bởi vì chỉ mục được phân nhóm xác định thứ tự vật lý của hàng, nếu chỉ mục nằm trên cột không phải là duy nhất, thì máy chủ phải thêm giá trị nền cho các hàng có giá trị khóa trùng lặp (trong trường hợp của bạn là bất kỳ hàng nào có cùng PersonId
) để giá trị kết hợp (khóa + giá trị nền) là duy nhất.
Điều duy nhất tôi muốn đề xuất là không sử dụng khóa thay thế (CourtOrderId
của bạn ) làm khóa chính, nhưng thay vào đó sử dụng khóa chính kết hợp của PersonId
và một số cột hoặc tập hợp các cột nhận dạng duy nhất khác. Tuy nhiên, nếu điều đó là không thể (hoặc không thực tế), hãy đặt chỉ mục được phân cụm trên CourtOrderId
.