Dengan INNER JOIN, MySQL umumnya akan memulai dengan tabel dengan jumlah baris terkecil. Dalam hal ini, dimulai dengan tabel finished
dan mencari catatan yang sesuai di saved
menggunakan indeks pada saved.email
.
Untuk LEFT JOIN, (tidak termasuk beberapa optimasi) MySQL biasanya menggabungkan record secara berurutan (dimulai dengan tabel paling kiri). Dalam hal ini, MySQL dimulai dengan tabel saved
, kemudian mencoba menemukan setiap record yang sesuai di finished
. Karena tidak ada yang dapat digunakan indeks di finished.email
, itu harus melakukan pemindaian penuh untuk setiap pencarian.
Sunting
Sekarang setelah Anda memposting skema Anda, saya dapat melihat bahwa MySQL mengabaikan indeks (finished.email
) saat beralih dari utf8
ke latin1
set karakter. Anda belum memposting set karakter dan susunan untuk setiap kolom, jadi saya akan menggunakan set karakter default untuk tabel. Susunan harus kompatibel agar MySQL dapat menggunakan indeks.
MySQL dapat memaksa (meningkatkan) sebuah latin1
collation, yang sangat terbatas, hingga utf8
susunan seperti unicode_ci
(jadi kueri pertama dapat menggunakan indeks di saved.email
dengan meningkatkan latin1
pemeriksaan ke utf8
), tetapi kebalikannya tidak benar (kueri kedua tidak dapat menggunakan indeks pada finished.email
karena tidak dapat menurunkan versi utf8
susunan ke latin1
).
Solusinya adalah dengan mengubah kedua kolom email ke susunan yang kompatibel, mungkin paling mudah dengan membuat kumpulan karakter dan susunan yang identik.