根据行数组合 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中文网其他相关文章!