Rumah >pangkalan data >tutorial mysql >Adakah Klausa WHERE atau Penapis Kriteria Sertai Lebih Pantas dalam Pertanyaan SQL?
Pertanyaan SQL Manakah yang Lebih Cepat: Kriteria Sertai atau Klausa Di Mana?
Soalan ini membandingkan prestasi dua struktur pertanyaan: menapis pada gabungan kriteria berbanding menggunakan klausa WHERE. Andaian biasa ialah penapisan pada kriteria gabungan adalah lebih cepat kerana ia mengurangkan keputusan yang ditetapkan lebih awal, tetapi kepercayaan ini mungkin tidak selalunya benar.
Perbandingan Pertanyaan
Mari kita periksa dua pertanyaan dengan struktur yang sama kecuali untuk peletakan penapis:
Pertanyaan 1 (Penapis pada Kriteria Sertai)
SELECT * FROM TableA a INNER JOIN TableXRef x ON a.ID = x.TableAID INNER JOIN TableB b ON x.TableBID = b.ID WHERE a.ID = 1;
Pertanyaan 2 (Tapis dalam Klausa WHERE)
SELECT * FROM TableA a INNER JOIN TableXRef x ON a.ID = x.TableAID INNER JOIN TableB b ON x.TableBID = b.ID AND a.ID = 1;
Ujian Prestasi
Untuk menentukan pertanyaan yang lebih pantas, ujian prestasi telah dijalankan. Hasilnya mendedahkan bahawa penapisan pada klausa WHERE adalah lebih pantas sedikit daripada menggunakan kriteria gabungan. Perbezaan masa berlalu adalah minimum:
Logik Ketekalan
Walaupun prestasi merupakan pertimbangan penting, ketekalan logik adalah sama pentingnya. Penapisan pada klausa WHERE sejajar dengan semantik cantuman kiri. Pertimbangkan pertanyaan berikut:Kiri Sertai dengan Penapis pada Kriteria Sertai
SELECT * FROM TableA a LEFT JOIN TableXRef x ON x.TableAID = a.ID AND a.ID = 1 LEFT JOIN TableB b ON x.TableBID = b.ID;
Kiri Sertai dengan Penapis di Klausa WHERE
SELECT * FROM TableA a LEFT JOIN TableXRef x ON x.TableAID = a.ID LEFT JOIN TableB b ON b.id = x.TableBID WHERE a.id = 1;Dalam kes gabungan kiri, penapis klausa WHERE memastikan bahawa hanya baris yang sepadan dikembalikan untuk ID tertentu, tidak kira sama ada gabungan sebelah kanan ada atau tidak. Tingkah laku ini konsisten secara logik dan lebih mudah difahami.
Kesimpulan
Walaupun perbezaan dalam prestasi boleh diabaikan, tapisan pada klausa WHERE adalah lebih pantas sedikit dan lebih konsisten secara logik, terutamanya apabila bekerja dengan sambung kiri. Oleh itu, biasanya disyorkan untuk meletakkan penapis dalam klausa WHERE untuk prestasi dan kebolehbacaan.Atas ialah kandungan terperinci Adakah Klausa WHERE atau Penapis Kriteria Sertai Lebih Pantas dalam Pertanyaan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!