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

Mengapa kinerja kueri MySQL sangat buruk saat menggunakan indeks CHAR/VARCHAR?

Jelas, masalahnya adalah bahwa kueri sedang melakukan pemindaian indeks. Pendekatan alternatif adalah melakukan dua pencarian indeks, untuk nilai pertama dan terakhir yang sama, dan kemudian menggunakan informasi meta dalam indeks untuk perhitungan. Berdasarkan pengamatan Anda, MySQL melakukan keduanya.

Sisa dari jawaban ini adalah spekulasi.

Alasan kinerja "hanya" 300 kali lebih lambat, daripada 200.000 kali lebih lambat, adalah karena overhead dalam membaca indeks. Sebenarnya pemindaian entri cukup cepat dibandingkan dengan operasi lain yang diperlukan.

Ada perbedaan mendasar antara angka dan string dalam hal perbandingan. Mesin hanya dapat melihat representasi bit dari dua angka dan mengenali apakah keduanya sama atau berbeda. Sayangnya, untuk string, Anda perlu mempertimbangkan penyandian/penyusunan. Saya pikir itu sebabnya perlu melihat nilainya.

Mungkin saja jika Anda memiliki 216.000 eksemplar persis string yang sama, maka MySQL akan dapat melakukan penghitungan menggunakan metadata di index. Dengan kata lain, pengindeks cukup pintar untuk menggunakan metadata untuk perbandingan kesetaraan yang tepat. Tapi, itu tidak cukup pintar untuk memperhitungkan penyandian.



  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 menambahkan data jeda kolom

  2. Bagaimana menemukan kolom non-null paling sedikit dalam satu baris tertentu dalam SQL?

  3. Mysql:Urutan hasil dengan pilih <fieldname> dari berbeda dengan urutan hasil dengan pilih * dari

  4. Implikasi Kinerja Penjadwalan Acara MySQL

  5. Cara terbaik untuk menyimpan data XML dalam database MySQL, dengan beberapa persyaratan khusus