Melaksanakan Pertanyaan PILIHAN Bersyarat Berdasarkan Kiraan Hasil Awal
Salah satu pengoptimuman dalam pertanyaan pangkalan data melibatkan pelaksanaan pertanyaan berbeza berdasarkan kiraan hasil pertanyaan awal. Ini amat berguna apabila menangani kes di mana pertanyaan pertama mungkin mengembalikan set kosong, mencetuskan keperluan untuk pertanyaan alternatif.
Pendekatan Asal: Penyata IF Bersarang dan Pertanyaan Berulang
Contoh yang disediakan dalam pertanyaan menunjukkan penggunaan pernyataan IF bersarang dengan COUNT() pertanyaan berasingan untuk semak baris sifar sebelum melaksanakan pertanyaan SELECT . Walau bagaimanapun, pendekatan ini tidak cekap kerana ia melaksanakan setiap pertanyaan dua kali: sekali untuk mengira dan sekali untuk mengembalikan hasil.
Penyelesaian Dioptimumkan: UNION ALL with EXISTS
Penyelesaian yang lebih baik adalah untuk menggunakan operator UNION ALL dengan klausa EXISTS. Teknik ini membenarkan pelaksanaan pertanyaan bersyarat berdasarkan set hasil pertanyaan pertama:
SELECT * FROM proxies WHERE A='B' UNION ALL SELECT * FROM proxies WHERE A='C' AND NOT EXISTS ( SELECT 1 FROM proxies WHERE A='B' )
Dalam pertanyaan ini:
Pendekatan ini secara berkesan menghapuskan keperluan untuk pertanyaan COUNT(*) berasingan dan memastikan bahawa SELECT kedua hanya dilaksanakan jika perlu.
Kesimpulan
Dengan menggunakan UNION ALL dengan EXISTS, pertanyaan pangkalan data boleh dioptimumkan dengan melaksanakan pertanyaan secara bersyarat berdasarkan kiraan hasil pertanyaan awal. Teknik ini meningkatkan prestasi dengan mengelakkan pelaksanaan pertanyaan yang tidak perlu dan menyediakan penyelesaian yang lebih cekap untuk mengendalikan set hasil kosong atau kiraan baris sifar.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengoptimumkan Pertanyaan PILIH Bersyarat Berdasarkan Kiraan Hasil Awal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!