Rumah >pangkalan data >tutorial mysql >JOIN lwn. WHERE Klausa untuk Penapisan: Pertanyaan SQL manakah yang Lebih Pantas?
Kriteria Penapis dalam Pertanyaan SQL: Klausa Sertai vs. Dimana
Apabila menanyakan data dalam SQL, terdapat dua pendekatan biasa untuk menggunakan kriteria penapis : Kriteria Sertai dan Klausa Dimana. Pembangun sering bergelut dengan persoalan pendekatan mana yang lebih cekap.
Soalan:
Pertanyaan SQL yang manakah berprestasi lebih pantas: pertanyaan yang menggunakan penapis pada Kriteria Sertai atau di mana Klausa?
Analisis:
Pertimbangkan dua pertanyaan:
Pertanyaan 1 (Tapis 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 di Mana Klausa):
SELECT * FROM TableA a INNER JOIN TableXRef x ON a.ID = x.TableAID AND a.ID = 1 INNER JOIN TableB b ON x.TableBID = b.ID;
Perbandingan Prestasi:
Secara empirikal, ujian mendedahkan bahawa Klausa Dimana adalah lebih pantas sedikit daripada Kriteria Sertai. Ini berlawanan dengan intuisi kerana seseorang mungkin menjangkakan Kriteria Sertai akan mengurangkan keputusan yang ditetapkan lebih awal.
Ketekalan Logik:
Selain prestasi, pertimbangkan ketekalan logik setiap pendekatan. Menggunakan Klausa Dimana memastikan bahawa operasi kekal sah walaupun Cantum digantikan dengan Cantuman Kiri.
Pendekatan Disyorkan:
Berdasarkan prestasi dan konsistensi logik, ia biasanya disyorkan untuk menggunakan kriteria penapis pada Di mana Klausa.
Contoh:
Pertimbangkan pertanyaan berikut:
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;
Pertanyaan ini adalah logik dan berfungsi serta pertanyaan yang setara dengan penapis pada Sertai Kriteria.
Kesimpulan:
Walaupun Kriteria Sertai dan Klausa Di mana menunjukkan prestasi yang sama dari sudut prestasi, Klausa Dimana secara logiknya lebih konsisten dan dengan itu pendekatan pilihan untuk memohon penapis kriteria dalam pertanyaan SQL.
Atas ialah kandungan terperinci JOIN lwn. WHERE Klausa untuk Penapisan: Pertanyaan SQL manakah yang Lebih Pantas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!