Kesan Susunan Keadaan Klausa WHERE terhadap Prestasi MySQL
Apabila mencipta pertanyaan kompleks dengan berbilang syarat, susunan syarat tersebut berpotensi mempengaruhi prestasi MySQL. Keadaan tertentu, seperti penapisan mengikut ID syarikat, boleh mengurangkan bilangan baris yang diperiksa dengan ketara.
Soalan:
Pertimbangkan dua pertanyaan berikut dengan susunan keadaan yang berbeza:
Pertanyaan 1:
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
Pertanyaan 2:
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)
Adakah susunan syarat ini memberi kesan kepada kecekapan MySQL?
Jawapan:
Tertib keadaan klausa WHERE sememangnya boleh menjejaskan Prestasi MySQL dalam keadaan tertentu. Pertimbangkan contoh berikut:
Pertanyaan 3:
SELECT myint FROM mytable WHERE myint >= 3 OR myslowfunction('query #1', myint) = 1;
Pertanyaan 4:
SELECT myint FROM mytable WHERE myslowfunction('query #2', myint) = 1 OR myint >= 3;
Satu-satunya perbezaan antara pertanyaan ini ialah susunan operan dalam keadaan OR . "myslowfunction" ialah fungsi yang sengaja melambatkan seketika. Pelaksanaan pertanyaan mendedahkan bahawa:
Ini menunjukkan bahawa apabila fungsi perlahan muncul di sebelah kiri keadaan OR dengan operan yang tidak selalu benar, fungsi tersebut dilaksanakan dengan lebih kerap.
Kesimpulan:
Ringkasnya, susunan syarat dalam klausa WHERE boleh mempengaruhi prestasi MySQL disebabkan oleh litar pintas. Untuk mengoptimumkan prestasi, letakkan keadaan yang dijangka dapat mengurangkan bilangan baris yang diperiksa dengan ketara (mis., ID syarikat) seawal mungkin dalam rantaian keadaan.
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!