Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL:kolom kardinalitas/selektivitas rendah =bagaimana cara mengindeks?

Indeks yang Anda gambarkan hampir tidak ada gunanya. Indeks paling baik digunakan saat Anda perlu memilih kecil jumlah baris dibandingkan dengan total baris.

Alasan untuk ini terkait dengan bagaimana database mengakses tabel. Tabel dapat dinilai baik dengan pemindaian tabel penuh, di mana setiap blok dibaca dan diproses secara bergantian. Atau dengan rowid atau pencarian kunci, di mana database memiliki kunci/rowid dan membaca baris persis yang dibutuhkannya.

Dalam kasus di mana Anda menggunakan klausa where berdasarkan kunci utama atau indeks unik lainnya, mis. where id = 1 , database dapat menggunakan indeks untuk mendapatkan referensi yang tepat ke tempat data baris disimpan. Ini jelas lebih efisien daripada melakukan pemindaian tabel penuh dan memproses setiap blok.

Sekarang kembali ke contoh Anda, Anda memiliki klausa where dari where status = 'enabled' , indeks akan mengembalikan 150m baris dan database harus membaca setiap baris secara bergantian menggunakan pembacaan kecil yang terpisah. Sedangkan mengakses tabel dengan pemindaian tabel penuh memungkinkan database menggunakan pembacaan yang lebih besar dan lebih efisien.

Ada titik di mana lebih baik melakukan pemindaian tabel penuh daripada menggunakan indeks. Dengan mysql Anda dapat menggunakan FORCE INDEX (idx_name) sebagai bagian dari kueri Anda untuk memungkinkan perbandingan antara setiap metode akses tabel.

Referensi:http://dev .mysql.com/doc/refman/5.5/en/how-to-avoid-table-scan.html



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL dipesan oleh sebelum dikelompokkan berdasarkan

  2. Cara Menyisipkan Beberapa Baris di MySQL

  3. Apa perbedaan antara tipe string VARCHAR(255) dan TINYTEXT di MySQL?

  4. Kursor Bersarang di Mysql

  5. Cara mendorong Data Database MySQL ke aplikasi web MVC .NET