依行數組合 SELECT 查詢
在 PHP 中,最佳化資料庫查詢可以提高腳本效能。一種技術是,如果第一個查詢傳回零行,則有條件地執行第二個 SELECT 查詢,從而將邏輯推入 MySQL。
考慮以下範例:
SELECT * FROM proxies WHERE (A='B') || SELECT * FROM proxies WHERE (A='C')
此程式碼執行兩個 SELECT 查詢,無論第一個查詢的結果。
更好的方法是使用 MySQL 的條件執行功能,如下所示程式碼:
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
但是,此方法仍然執行兩次計數查詢。
更有效的解決方案是結合使用UNION ALL 和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' )
如果存在A='B' 的行,此查詢將檢索它們;如果不存在,則檢索A='C' 的行。透過使用 EXISTS 條件,查詢僅檢索第一個指定條件 (A='B') 存在的行,從而導致單次執行計數查詢。
SQL Fiddle 示範:https:// /www.sqlfiddle.com/#!9/3de314
以上是如何根據行數組合 SELECT 語句來最佳化 MySQL 查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!