这两个mysql查询之间的性能差异是什么?

时间:2017-03-09 09:56:09

标签: mysql

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条目;

2 个答案:

答案 0 :(得分:0)

(1,2,3)在代码运行时已经是已知的,而第二个示例是来自另一个表的查询,后者需要更多是完全正常的。然而,600x的缓慢需要进一步解释。如果没有您的情况的进一步信息,我们只能猜测,但潜在的问题如下:

  • 第二个表中有许多ID,第一个表中有许多记录
  • 内部查询针对外部查询的每条记录运行(极有可能)
  • 您用于过滤的列上缺少索引

如果内部查询的结果应该类似于第一个示例集,那么您可能希望将查询分成两部分。您可以单独加载ID,然后将结果用于第二个查询。

答案 1 :(得分:0)

这种情况发生在mysql< 5.5。似乎有一个错误会导致查询时间过长。解决方案是在tmp2.id上添加索引或升级到更高版本的mysql。