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

Optimalisasi kueri MySQL dari istilah LIKE% ORDER BY ke dalam

Anda mengajukan pertanyaan lain "Membuat Indeks yang terbaik untuk pencarian wildcard melalui 40 Juta nama". Oke, Anda memiliki 40 juta catatan.

Sekarang perhatikan rumus berikut:

x = COUNT(DISTINCT values in a column) / COUNT(values in a column)

Indeks pada kolom jauh lebih baik, semakin dekat x adalah ke 1. Jika 1, semua nilai berbeda, tidak ada duplikat dan indeks cukup cepat.

Sekarang Anda mencari 'john%'. Itu 4 huruf dan ujung terbuka. Huruf mana yang tidak penting, DB Anda harus berurusan dengan 26*26*26*26=456976 nilai yang berbeda. Masukkan itu ke dalam rumus di atas dan 40 juta catatan Anda. Anda mendapatkan x dari 0,0114244.

Saya tidak tahu apa ambang batasnya lagi, tetapi IIRC itu 0,1 atau sesuatu. Jadi, jika Anda x di atas 0,1 indeks yang digunakan, jika lebih rendah, tidak.

Mengapa begitu? Menggunakan indeks bahkan dapat memperlambat segalanya, karena DB Anda harus melihat indeks, lihat di indeks itu di posisi mana pada hard drive fisik Anda catatan yang sesuai dan kemudian dapatkan catatan itu. Oleh karena itu, ketika x di bawah 10% lebih cepat hanya melakukan pemindaian seluruh tabel.

Untuk meringkas:Memfilter 40 juta catatan dengan hanya satu indeks lemah seperti milik Anda sama sekali tidak berguna.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. bagaimana kita menggunakan mysqli dengan benar untuk mengambil semua catatan dari tabel?

  2. Atomicity beberapa subkueri MySQL dalam kueri INSERT/UPDATE?

  3. Bersyarat dalam MYSQL di mana klausa

  4. Terjadi kesalahan fatal selama eksekusi perintah dengan mySQL INSERT

  5. MySqlCommand().ExecuteReader().GetString() tidak berfungsi