Where Clause Condition Ordering dan MySQL Performance
Dalam senario di mana pertanyaan mengandungi banyak syarat dan syarat tertentu mengecilkan set hasil dengan ketara, susunan syarat dalam klausa WHERE boleh memberi kesan kepada prestasi MySQL.
Pertimbangkan perkara berikut senario:
SELECT * FROM clients WHERE (firstname LIKE :foo OR lastname LIKE :foo OR phone LIKE :foo) AND (firstname LIKE :bar OR lastname LIKE :bar OR phone LIKE :bar) AND company = :ugh;
SELECT * FROM clients WHERE company = :ugh AND (firstname LIKE :foo OR lastname LIKE :foo OR phone LIKE :foo) AND (firstname LIKE :bar OR lastname LIKE :bar OR phone LIKE :bar);
Dalam pertanyaan pertama, syarat yang menapis berdasarkan medan syarikat diletakkan pada permulaan klausa WHERE. Keadaan ini secara berkesan mengecilkan bilangan baris yang perlu dinilai untuk keadaan seterusnya.
Dalam pertanyaan kedua, susunan syarat diterbalikkan. Keadaan yang menapis berdasarkan medan syarikat dinilai selepas syarat lain.
Bergantung pada pengedaran data, susunan syarat boleh menjejaskan prestasi. Dengan meletakkan syarat yang mengurangkan keputusan yang ditetapkan dengan ketara pada permulaan klausa WHERE, MySQL boleh menggunakannya lebih awal dan mengelak daripada menilai syarat berikutnya untuk baris yang tidak memenuhi syarat tersebut.
Pengoptimuman ini dikenali sebagai "short -litar." Jika keadaan pada mulanya menilai kepada palsu untuk baris tertentu, MySQL akan segera membuang baris tersebut tanpa menilai syarat yang selebihnya.
Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa pengoptimuman ini tidak selalu digunakan. Jika semua keadaan mempunyai selektiviti yang sama, susunan keadaan mungkin tidak mempunyai kesan yang ketara pada prestasi.
Untuk menentukan susunan keadaan optimum, pertimbangkan faktor berikut:
Atas ialah kandungan terperinci Bagaimanakah Pesanan Keadaan Klausa WHERE Mempengaruhi Prestasi Pertanyaan MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!