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

Haruskah saya mengindeks bidang bit di SQL Server?

Pertimbangkan apa itu indeks dalam SQL - dan indeks sebenarnya adalah sepotong memori yang menunjuk pada potongan memori lainnya (yaitu pointer ke baris). Indeks dipecah menjadi beberapa halaman sehingga bagian indeks dapat dimuat dan dikeluarkan dari memori tergantung pada penggunaan.

Saat Anda meminta sekumpulan baris, SQL menggunakan indeks untuk menemukan baris lebih cepat daripada pemindaian tabel (melihat setiap baris).

SQL memiliki indeks berkerumun dan tidak berkerumun. Pemahaman saya tentang indeks berkerumun adalah bahwa mereka mengelompokkan nilai indeks yang serupa ke dalam halaman yang sama. Dengan cara ini ketika Anda meminta semua baris yang cocok dengan nilai indeks, SQL dapat mengembalikan baris tersebut dari halaman memori yang dikelompokkan. Inilah sebabnya mengapa mencoba mengelompokkan indeks kolom GUID adalah ide yang buruk - Anda tidak mencoba mengelompokkan nilai acak.

Saat Anda mengindeks kolom bilangan bulat, indeks SQL berisi sekumpulan baris untuk setiap nilai indeks. Jika Anda memiliki rentang 1 hingga 10, maka Anda akan memiliki 10 penunjuk indeks. Bergantung pada berapa banyak baris yang ada, ini dapat di-page secara berbeda. Jika kueri Anda mencari indeks yang cocok dengan "1" dan kemudian di mana Nama berisi "Fred" (dengan asumsi kolom Nama tidak diindeks), SQL mendapatkan kumpulan baris yang cocok dengan "1" dengan sangat cepat, lalu tabel memindai untuk menemukan sisanya.

Jadi apa yang sebenarnya dilakukan SQL adalah mencoba mengurangi set kerja (jumlah baris) yang harus diulang.

Saat Anda mengindeks bidang bit (atau rentang sempit), Anda hanya mengurangi set kerja dengan jumlah baris yang cocok dengan nilai itu. Jika Anda memiliki sejumlah kecil baris yang cocok, itu akan banyak mengurangi set kerja Anda. Untuk sejumlah besar baris dengan distribusi 50/50, ini mungkin memberi Anda sedikit peningkatan kinerja vs. menjaga indeks tetap up to date.

Alasan semua orang mengatakan untuk menguji adalah karena SQL berisi pengoptimal yang sangat pintar dan kompleks yang dapat mengabaikan indeks jika memutuskan pemindaian tabel lebih cepat, atau mungkin menggunakan pengurutan, atau dapat mengatur halaman memori namun sangat disukai.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Periksa apakah Tabel Direferensikan oleh Kunci Asing di SQL Server dengan OBJECTPROPERTY()

  2. Mengapa Alat Pemantauan Database Cloud untuk SQL Server Berharga

  3. Tujuan SQL Server vs Tujuan OLE DB

  4. SQL Server Karakter Escape Pencarian Teks Lengkap?

  5. Menggabungkan Nilai Kolom menjadi Daftar yang Dipisahkan Koma