Rumah >pangkalan data >tutorial mysql >Adakah Klausa WHERE atau Penapis Kriteria Sertai Lebih Pantas dalam Pertanyaan SQL?

Adakah Klausa WHERE atau Penapis Kriteria Sertai Lebih Pantas dalam Pertanyaan SQL?

Barbara Streisand
Barbara Streisandasal
2025-01-01 02:26:09441semak imbas

Is a WHERE Clause or Join Criteria Filter Faster in SQL Queries?

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:

  • WHERE Klausa: 143016 ms
  • Kriteria Sertai: 143256 ms
  • 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn