SQL IN lwn. =: Percanggahan Prestasi
Ikhtisar:
Pengendali SQL IN
menyemak sama ada nilai wujud dalam senarai yang ditentukan. Walau bagaimanapun, prestasi boleh terjejas dengan ketara apabila menggunakan IN
berbanding pengendali =
, terutamanya dalam senario tertentu.
Isunya:
Pertanyaan SQL khusus menunjukkan perbezaan prestasi yang ketara antara menggunakan IN
dan =
, walaupun ketika IN
hanya membandingkan satu nilai.
Punca Punca:
Hambatan prestasi berpunca daripada kecacatan pengoptimuman MySQL. MySQL tersalah mengkategorikan subkueri dalam klausa IN
sebagai subkueri bergantung, bukannya subkueri bebas.
Subkueri Bergantung vs. Bebas:
Kesilapan klasifikasi ini adalah kritikal. Subkueri bersandar dilaksanakan berulang kali untuk setiap baris dalam pertanyaan luar, secara drastik memberi kesan kepada prestasi. Subkueri bebas, sebaliknya, dilaksanakan sekali sahaja dan keputusannya dicache untuk kecekapan.
Analisis Ringkas:
Versi ringkas pertanyaan asal mereplikasi isu prestasi, mengesahkan bahawa subquery fasal IN
dianggap sebagai bergantung, yang membawa kepada pelaksanaan yang lebih perlahan.
Penyelesaian:
Kesilapan mengenal pasti jenis subkueri MySQL sebagai bergantung adalah punca kemerosotan prestasi apabila menggunakan IN
. Masalah ini diselesaikan dalam MySQL 5.6.x dan versi yang lebih baru.
Atas ialah kandungan terperinci Mengapa SQL Saya DALAM Keadaan Lebih Lambat Daripada '=' Apabila Membandingkan Satu Nilai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!