为什么这个带有子查询的SQL查询非常慢?

Rya*_*sel 5 mysql 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
);
Run Code Online (Sandbox Code Playgroud)

内部查询运行得非常快(少于0.1秒)以获得两个ID,一个用于状态1,一个用于状态2,然后它基于主键进行选择以便对其进行索引.解释查询说,它只搜索135k行,而且我不能为我的生活弄清楚为什么这么慢.

Sir*_*rko 8

内部查询一次又一次地对表的每一行分别运行.

由于内部查询中没有引用外部查询,我建议您拆分这两个查询,然后在WHERE子句中插入内部查询的结果.


Red*_*ter 6

select b.*
from transaction_batch b
inner join (
    select max(id) as id
    from transaction_batch
    where status_id in (1, 2)
    group by status_id
) bm on b.id = bm.id
Run Code Online (Sandbox Code Playgroud)

  • 虽然我同意op应该尝试这个查询,但它根本不回答op的问题 (2认同)