where exists ( select 1 from B where a.order_id = b.order_id )这是个相关子查询,执行慢是因为 B 的查询依赖于 A 的结果,这个时候会先执行 A ,如果 A 的结果剩下 20w ,B 的子查询就要执行 20W 次,可以参考这个文档:
https://blog.csdn.net/weixin_43997319/article/details/123713513 ;最简单的优化方案就是使用 join: select
A.*
from A
inner join (
select
A.idfrom A
left join ( select 1 from B where ) BX ON a.order_id = b.order_id
<where>
<if test="name != null and namelength()>0">
</where>
) AX on
AX.id =
A.idwhere 1=1