select sum(a) from tbl1 where id in (1,2,3) (0.1 seconds)
和
select sum(a) from tbl1 where id in (select id from tbl2) (60 seconds)
select id from tbl2
在0.001秒内返回1,2,3;
tbl1大约有2.2M条目;
答案 0 :(得分:0)
(1,2,3)
在代码运行时已经是已知的,而第二个示例是来自另一个表的查询,后者需要更多是完全正常的。然而,600x的缓慢需要进一步解释。如果没有您的情况的进一步信息,我们只能猜测,但潜在的问题如下:
如果内部查询的结果应该类似于第一个示例集,那么您可能希望将查询分成两部分。您可以单独加载ID,然后将结果用于第二个查询。
答案 1 :(得分:0)
这种情况发生在mysql< 5.5。似乎有一个错误会导致查询时间过长。解决方案是在tmp2.id上添加索引或升级到更高版本的mysql。