Code Bye

left join与exists效率比较

sql1:
select A.* from tb_a A
left join (select AID,MAX(date) from tb_b GROUP BY AID HAVING MAX(date)>NOW()) B ON B.AID=A.id
where b.AID IS not NULL
sql2:
SELECT A.* from tb_a A
where EXISTS (
SELECT 1 FROM tb_b B WHERE B.AID = A.id
GROUP BY B.AID HAVING  MAX(date) > NOW()
)
其中tb_a与tb_b关系为一对多,且两表均未使用索引,在使用过程中sql1 执行0.3s,sql2执行11s。原因是什么?
解决方案

20

可以通过 explain select 分析结果。

20

看一下执行计划

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明left join与exists效率比较