Perbedaan antara clustered vs non-clustered index adalah clustered index menentukan urutan fisik baris dalam database . Dengan kata lain, menerapkan indeks berkerumun ke PersonId
berarti baris akan diurutkan secara fisik berdasarkan PersonId
dalam tabel, memungkinkan pencarian indeks pada ini untuk langsung ke baris (bukan indeks non-cluster, yang akan mengarahkan Anda ke lokasi baris, menambahkan langkah ekstra).
Konon, itu tidak biasa agar kunci utama tidak menjadi indeks berkerumun, tetapi tidak pernah terdengar. Masalah dengan skenario Anda sebenarnya kebalikan dari apa yang Anda asumsikan:Anda ingin unik nilai dalam indeks berkerumun, bukan duplikat. Karena indeks berkerumun menentukan urutan fisik baris, jika indeks berada pada kolom yang tidak unik, maka server harus menambahkan nilai latar belakang ke baris yang memiliki nilai kunci duplikat (dalam kasus Anda, setiap baris dengan nilai kunci duplikat yang sama PersonId
) sehingga nilai gabungan (nilai kunci + latar belakang) adalah unik.
Satu-satunya hal yang saya sarankan adalah tidak menggunakan kunci pengganti (CourtOrderId
Anda ) sebagai kunci utama, tetapi gunakan kunci utama gabungan dari PersonId
dan beberapa kolom atau kumpulan kolom pengenal unik lainnya. Jika itu tidak mungkin (atau tidak praktis), maka letakkan indeks berkerumun di CourtOrderId
.