Pelaksanaan Pertanyaan Bersyarat Berdasarkan Keputusan Pertanyaan Pertama
Dalam pelbagai senario pengoptimuman pangkalan data, keperluan timbul untuk melaksanakan pertanyaan berbeza berdasarkan keputusan pertanyaan awal. Ini boleh timbul apabila pertanyaan kedua hanya perlu dilakukan jika pertanyaan pertama tidak mengembalikan baris.
Pernyataan Masalah
Dalam persekitaran MySQL, pertimbangkan senario berikut: anda ingin mendapatkan semula data dengan cekap daripada jadual "proksi" berdasarkan syarat tertentu. Walau bagaimanapun, jika pertanyaan pertama tidak mengembalikan baris, anda ingin melaksanakan pertanyaan alternatif.
Percubaan Awal dengan Pernyataan IF Bersyarat
Satu pendekatan biasa untuk menangani senario ini ialah untuk menggunakan pernyataan IF bersyarat:
IF (SELECT COUNT(*) FROM proxies WHERE A='B') > 0 THEN SELECT * FROM proxies WHERE A='B' ELSEIF (SELECT COUNT(*) FROM proxies WHERE A='C') > 0 THEN SELECT * FROM proxies WHERE A='C' END IF;
Walau bagaimanapun, pendekatan ini tidak cekap kerana ia memerlukan pangkalan data asas untuk melaksanakan pertanyaan COUNT(*) dua kali - sekali untuk menyemak kiraan baris dan sekali lagi untuk mendapatkan semula data sebenar.
Penyelesaian Dioptimumkan menggunakan UNION ALL with EXISTS
Untuk mengoptimumkan proses ini, MySQL menyediakan penyelesaian yang lebih cekap menggunakan operator UNION ALL bersama-sama dengan EXISTS klausa:
SELECT * FROM proxies WHERE A='B' UNION ALL SELECT * FROM proxies WHERE A='C' AND NOT EXISTS ( SELECT 1 FROM proxies WHERE A='B' );
Pertanyaan yang dioptimumkan ini melaksanakan langkah-langkah berikut:
Pendekatan yang dioptimumkan ini mengelakkan keperluan untuk pelaksanaan pertanyaan berlebihan dan meningkatkan kecekapan pelaksanaan pertanyaan bersyarat dengan ketara.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Pertanyaan Bersyarat dengan Cekap dalam MySQL Berdasarkan Hasil Pertanyaan Pertama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!