Rumah > pangkalan data > tutorial mysql > Bagaimanakah Urutan Keadaan Klausa WHERE Mempengaruhi Prestasi Pertanyaan MySQL?

Bagaimanakah Urutan Keadaan Klausa WHERE Mempengaruhi Prestasi Pertanyaan MySQL?

Patricia Arquette
Lepaskan: 2024-12-27 14:35:10
asal
876 orang telah melayarinya

How Does the Order of WHERE Clause Conditions Affect MySQL Query Performance?

Kesan Perintah Keadaan Klausa WHERE terhadap Prestasi MySQL

Apabila membuat pertanyaan kompleks dengan banyak syarat, susunan yang anda tentukan syarat tersebut boleh memberi kesan kepada prestasi MySQL. Walaupun susunan secara amnya membuat sedikit perbezaan untuk keadaan mudah, ia menjadi lebih ketara apabila satu syarat mengecilkan set hasil dengan ketara.

Pertimbangkan dua pertanyaan berikut:

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
Salin selepas log masuk
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)
Salin selepas log masuk

Dalam kedua-dua pertanyaan, kami mencari baris yang memenuhi kriteria khusus merentas berbilang medan menggunakan syarat ATAU. Walaupun syarat pertama biasanya menghasilkan set hasil yang besar, syarat "syarikat" mengehadkan keputusan kepada set yang lebih sempit.

Menurut pelan pelaksanaan MySQL, ia mengikut perintah penilaian kiri ke kanan untuk keadaan WHERE . Ini bermakna dalam pertanyaan pertama, MySQL akan melaksanakan syarat "syarikat" sebelum menggunakan syarat ATAU. Jika keadaan "syarikat" mengembalikan sebilangan kecil baris, MySQL akan mengindeksnya untuk kecekapan, mengurangkan overhed pemprosesan keadaan ATAU berikutnya.

Sebaliknya, pertanyaan kedua mempunyai syarat "syarikat" yang disenaraikan selepas syarat ATAU. Akibatnya, MySQL akan melaksanakan syarat OR terlebih dahulu, berpotensi memproses bilangan baris yang lebih besar dan mencipta indeks sementara jika diperlukan. Langkah pengindeksan tambahan ini boleh meningkatkan overhed pertanyaan.

Litar Pintas dan Kesan Prestasi

Adalah penting untuk ambil perhatian bahawa susunan keadaan klausa WHERE juga boleh menjejaskan prestasi dalam kes di mana litar pintas berlaku. Apabila keadaan dinilai sebagai benar, MySQL serta-merta mengembalikan benar untuk keseluruhan keadaan, memintas penilaian keadaan berikutnya.

Sebagai contoh, pertimbangkan pertanyaan berikut:

SELECT myint FROM mytable WHERE myint >= 3 OR myslowfunction('query #1', myint) = 1;
Salin selepas log masuk

Jika " myint >= 3" menilai kepada benar untuk baris tertentu, MySQL tidak akan melaksanakan panggilan "myslowfunction", yang merupakan operasi yang memakan masa. Walau bagaimanapun, jika "myslowfunction" muncul di sebelah kiri keadaan OR, ia akan dilaksanakan untuk semua baris, walaupun yang tidak memenuhi syarat "myint >= 3".

Kesimpulan

Walaupun susunan keadaan klausa WHERE umumnya mempunyai kesan prestasi yang minimum, ia boleh menjadi faktor dalam kes di mana satu keadaan ketara mengecilkan set keputusan atau di mana litar pintas terlibat. Dengan meletakkan syarat yang lebih ketat pada permulaan klausa WHERE, anda berpotensi meningkatkan prestasi dan kecekapan pertanyaan.

Atas ialah kandungan terperinci Bagaimanakah Urutan Keadaan Klausa WHERE Mempengaruhi Prestasi Pertanyaan MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan