Menggabungkan Pertanyaan PILIH Berdasarkan Kiraan Baris
Dalam PHP, mengoptimumkan pertanyaan pangkalan data boleh meningkatkan prestasi skrip. Satu teknik adalah menolak logik ke dalam MySQL dengan melaksanakan secara bersyarat pertanyaan SELECT kedua jika yang pertama mengembalikan sifar baris.
Pertimbangkan contoh berikut:
SELECT * FROM proxies WHERE (A='B') || SELECT * FROM proxies WHERE (A='C')
Kod ini menjalankan kedua-dua pertanyaan SELECT tanpa mengira hasil pertanyaan pertama.
Pendekatan yang lebih baik ialah menggunakan ciri pelaksanaan bersyarat MySQL, seperti yang dilihat dalam kod ini:
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, kaedah ini masih melaksanakan pertanyaan kiraan dua kali.
Penyelesaian yang lebih cekap ialah menggunakan UNION ALL bersama-sama dengan EXISTS:
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 ini mendapatkan semula baris dengan A='B' jika ia wujud, dan jika tidak, ia mendapatkan semula baris dengan A='C.' Dengan menggunakan keadaan EXISTS, pertanyaan hanya mendapatkan semula baris untuk keadaan pertama yang ditentukan (A='B') jika ia wujud, menghasilkan satu pelaksanaan pertanyaan kiraan.
Demo SQL Fiddle: https:/ /www.sqlfiddle.com/#!9/3de314
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengoptimumkan Pertanyaan MySQL dengan Menggabungkan Pernyataan SELECT Berdasarkan Kiraan Baris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!