Prestasi Penapis: Kriteria Sertai lwn. Klausa WHERE
Apabila melakukan pertanyaan SQL, adalah perkara biasa untuk menapis data menggunakan kedua-dua kriteria gabungan dan klausa MANA. Walau bagaimanapun, persoalan timbul: pendekatan manakah yang menawarkan prestasi yang lebih baik?
Pertimbangkan dua pertanyaan berikut:
Pertanyaan 1 (Penapis pada 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 (Penapis dihidupkan DI MANA)
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
Secara intuitif, ramai yang beranggapan bahawa penapisan pada kriteria penyertaan (Pertanyaan 1) adalah lebih cepat kerana ia mengurangkan keputusan yang ditetapkan lebih awal. Walau bagaimanapun, ujian empirikal mendedahkan hasil yang mengejutkan.
Keputusan Prestasi
Selepas menjalankan ujian dengan set data sebanyak 1000 rekod dalam setiap jadual, keputusan menunjukkan bahawa Pertanyaan 2 (menapis pada klausa WHERE) sebenarnya sedikit lebih pantas:
Filter Technique | Elapsed Time (ms) |
---|---|
Join Criteria (Query 1) | 143256 |
WHERE Clause (Query 2) | 143016 |
Pertimbangan Logik
Walaupun prestasi hampir antara kedua-dua pendekatan, terdapat hujah logik yang memihak kepada penggunaan klausa WHERE untuk penapisan:
Kesimpulan
Walaupun kedua-dua teknik penapisan berfungsi sama, menggunakan penapis dalam klausa WHERE adalah sedikit lebih pantas dan lebih konsisten secara logik. Teknik ini memberikan prestasi yang sama dan memastikan kejelasan dalam pertanyaan.
Atas ialah kandungan terperinci JOIN lwn. WHERE Klausa Penapisan: Pendekatan SQL Mana yang Menawarkan Prestasi Lebih Baik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!