我有这样的查询:为什么使用子查询的这个SQL查询非常慢?
select *
from transaction_batch
where id IN
(
select MAX(id) as id
from transaction_batch
where status_id IN (1,2)
group by status_id
);
内部查询运行速度非常快(小于0.1秒),以得到两个ID的,一个用于状态1,一个用于状态2,则它选择基于主密钥,因此它被索引。解释查询说,它使用的只是在哪里搜索135k行,而我不能为我的生活找出为什么这么慢。
MySQL对于优化子查询非常愚蠢,这就是为什么它很慢。改进它的唯一方法是将它重写为JOIN(如RedFilter所示) –