我有两个提供相同输出的SQL查询。 我的第一直觉是使用这样的:两个类似SQL查询之间的巨大性能差异
SELECT * FROM performance_dev.report_golden_results
where id IN (SELECT max(id) as 'id' from performance_dev.report_golden_results
group by platform_id, release_id, configuration_id)
现在,这把像70秒即可完成!
搜索另一种解决办法我试过类似的东西:
SELECT * FROM performance_dev.report_golden_results e
join (SELECT max(id) as 'id'
from performance_dev.report_golden_results
group by platform_id, release_id, configuration_id) s
ON s.id = e.id;
出人意料的是,这场耗时0.05秒即可完成!
这两个怎么这么不同?
谢谢!
'''''''''''''''''''''''这就是为什么使用明确的“join”编写这样的查询通常更好。 – 2014-10-12 08:59:30
从我记得,MySql无法正确优化子查询,但您的第二个查询使用连接。您需要检查执行计划才能正确看到它正在执行的操作 – ydaetskcoR 2014-10-12 09:01:06
查看两个查询的'EXPLAIN'输出。 – Barmar 2014-10-12 09:02:34