Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Clustered vs Non-Clustered

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 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menyimpan Tipe Data Biner di SQL Server

  2. pilih * dari tabel vs pilih colA, colB, dll. dari tabel perilaku menarik di SQL Server 2005

  3. Melewati Daftar<> ke SQL Stored Procedure

  4. Bisakah LINQ-to-SQL menghilangkan kolom yang tidak ditentukan pada sisipan sehingga nilai default basis data digunakan?

  5. Penyortiran Kunci Utama