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

MySQL:perbandingan nilai integer dan bidang string dengan indeks

Intinya adalah bahwa indeks tidak dapat digunakan jika database harus melakukan konversi di sisi tabel perbandingan.

Selain itu, DB selalu menyembunyikan String -> Angka karena ini adalah cara deterministik (jika tidak, 1 dapat dikonversi menjadi '01', '001' seperti yang disebutkan dalam komentar).

Jadi, jika kita membandingkan dua kasus yang tampaknya membingungkan Anda:

-- index is used
EXPLAIN SELECT * FROM a_table WHERE int_column = '1';

DB mengonversi string '1' menjadi angka 1 dan kemudian mengeksekusi kueri. Akhirnya memiliki int di kedua sisi sehingga dapat menggunakan indeks.

-- index is NOT used. WTF?
EXPLAIN SELECT * FROM a_table WHERE str_column = 1;

Sekali lagi, ini mengubah string menjadi angka. Namun, kali ini harus mengonversi data yang disimpan dalam tabel. Faktanya, Anda melakukan pencarian seperti cast(str_column as int) = 1 . Artinya, Anda tidak mencari di data yang diindeks lagi, DB tidak bisa gunakan indeks.

Silakan lihat ini untuk detail lebih lanjut:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menyimpan catatan database ke dalam array

  2. Bagaimana cara menghubungkan Java ke Mysql?

  3. membuat database di mysql dari java

  4. Desain Basis Data untuk menyimpan Pesan Obrolan antar orang

  5. Waktu eksekusi maksimum 30 detik terlampaui