【发布时间】:2011-11-27 21:02:08
【问题描述】:
查询:
SELECT a FROM table1 WHERE b IN (SELECT b FROM table1 WHERE c = 2);
如果子查询返回零结果,mysql需要很长时间才能实现它最终返回一个空结果。 (子查询为空时2.5s,有子查询结果时0.0005s)。
我的问题:有没有办法修改查询,使其仍然返回空结果,但花费的时间与有结果时相同?
我试过了:
SELECT a FROM table1 WHERE b IN ((SELECT b FROM table1 WHERE c = 2), 555);
...但它仅在子查询为空时有效。如果有结果,则查询失败。
-- 我不想将查询格式从嵌套更改为加入/等。
想法..?谢谢!
-- 编辑:另外,我忘了补充:子查询可能会产生一个相当大的结果列表,而不仅仅是一个结果。 --- 另外,当我输入“555”时,我指的是列中永远不会存在的值。
-- 编辑 2:我还尝试了以下查询,它“有效”,但是当它有结果时,它仍然需要比原始查询长几个数量级:
SELECT a FROM table1 WHERE b IN (SELECT 555 AS b UNION SELECT b FROM table1 WHERE c = 2);
【问题讨论】:
标签: mysql query-optimization subquery