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

这两个mysql查询之间的性能差异是什么?,mysql,Mysql,及 从tbl2中选择id在0.001秒内返回1,2,3 tbl1大约有220万个条目 1,2,3是代码运行时已知的内容,而第二个示例是来自另一个表的查询,后者需要更多的时间是完全正常的。然而,600倍的慢度需要进一步的解释。没有关于您情况的进一步信息,我们只能猜测,但潜在的问题如下: 第二个表中有许多ID,第一个表中有许多记录 内部查询针对外部查询的每条记录运行,可能性很高 用于筛选的列上缺少索引 如果内部查询的结果应该类似于第一个示例的集合,那么您可能希望将查询分成两部分。您可以单独加载ID,

从tbl2中选择id在0.001秒内返回1,2,3

tbl1大约有220万个条目

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

第二个表中有许多ID,第一个表中有许多记录 内部查询针对外部查询的每条记录运行,可能性很高 用于筛选的列上缺少索引
如果内部查询的结果应该类似于第一个示例的集合,那么您可能希望将查询分成两部分。您可以单独加载ID,然后将结果用于第二次查询。

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

临时表中缺少索引。您可能需要查看执行计划,查看是否对每个id执行了从tbl2选择id,而不是在开始时执行一次。运行查询解释从tbl1选择suma,其中从tbl2选择id中的id并发布结果。嘿,伙计们,谢谢你们的评论。在mysql 5.4中,似乎有一个错误,当子查询在所选字段上没有索引时,会导致较高的查询次数;这是查询设计中的一个缺陷。尝试谷歌搜索术语表扫描。
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)