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

Haruskah setiap Tabel Pengguna memiliki Indeks Berkelompok?

Sulit untuk menyatakan ini lebih ringkas daripada SQL Server MVP Brad McGehee:

Sebagai aturan praktis, setiap tabel harus memiliki indeks berkerumun. Umumnya, tetapi tidak selalu, indeks berkerumun harus berada pada kolom yang meningkat secara monoton – seperti kolom identitas, atau kolom lain yang nilainya meningkat – dan bersifat unik. Dalam banyak kasus, kunci utama adalah kolom yang ideal untuk indeks berkerumun.

BOL menggemakan sentimen ini:

Dengan sedikit pengecualian, setiap tabel harus memiliki indeks berkerumun.

Alasan untuk melakukan ini banyak dan terutama didasarkan pada fakta bahwa indeks yang dikelompokkan secara fisik memesan data Anda di penyimpanan .

  • Jika indeks berkerumun Anda pada satu kolom meningkat secara monoton, penyisipan terjadi secara berurutan pada perangkat penyimpanan Anda dan pemisahan halaman tidak akan terjadi.

  • Indeks berkerumun efisien untuk menemukan baris tertentu ketika nilai yang diindeks unik, seperti pola umum pemilihan baris berdasarkan kunci utama.

  • Indeks berkerumun sering memungkinkan kueri yang efisien pada kolom yang sering dicari untuk rentang nilai (between , > , dll.).

  • Pengelompokan dapat mempercepat kueri di mana data biasanya diurutkan berdasarkan kolom atau kolom tertentu.

  • Indeks berkerumun dapat dibangun kembali atau diatur ulang sesuai permintaan untuk mengontrol fragmentasi tabel.

  • Manfaat ini bahkan dapat diterapkan pada tampilan.

Anda mungkin tidak ingin memiliki indeks berkerumun di:

  • Kolom yang sering mengalami perubahan data, karena SQL Server kemudian harus mengurutkan ulang data secara fisik di penyimpanan.

  • Kolom yang sudah dicakup oleh indeks lain.

  • Kunci lebar, karena indeks berkerumun juga digunakan dalam pencarian indeks yang tidak berkerumun.

  • Kolom GUID, yang lebih besar dari identitas dan juga nilai acak yang efektif (tidak mungkin diurutkan), meskipun newsequentialid() dapat digunakan untuk membantu mengurangi pemesanan ulang fisik selama penyisipan.

  • Alasan yang jarang untuk menggunakan heap (tabel tanpa indeks berkerumun) adalah jika data selalu diakses melalui indeks yang tidak berkerumun dan RID (pengidentifikasi baris internal SQL Server) diketahui lebih kecil daripada kunci indeks berkerumun.

Karena pertimbangan ini dan pertimbangan lainnya, seperti beban kerja aplikasi tertentu, Anda harus hati-hati memilih indeks berkerumun untuk mendapatkan manfaat maksimal untuk kueri Anda.

Perhatikan juga bahwa ketika Anda membuat kunci utama pada tabel di SQL Server, secara default akan membuat indeks berkerumun yang unik (jika belum memilikinya). Ini berarti bahwa jika Anda menemukan tabel yang tidak memiliki indeks berkerumun, tetapi memiliki kunci utama (seperti semua tabel seharusnya), pengembang sebelumnya telah membuat keputusan untuk membuatnya seperti itu. Anda mungkin ingin memiliki alasan kuat untuk mengubahnya (yang banyak, seperti yang telah kita lihat). Menambahkan, mengubah, atau menghapus indeks berkerumun memerlukan penulisan ulang seluruh tabel dan indeks non-cluster, jadi ini bisa memakan waktu lama di tabel besar.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perilaku @@rowcount yang tidak terduga di dalam UDF di MS SQL 2019

  2. Ubah Kata Sandi untuk Login SQL Server

  3. Ganti kemunculan pertama substring dalam string di SQL

  4. Bagaimana Memulai dengan SQL Server di Azure

  5. Mengonfigurasi Grup Ketersediaan AlwaysOn di SQL Server