关于一对多连表查询效率问题

举个例子,两张表: A表 一对多 B表
A表,几千条数据 id
B表,一百万条数据 id a_id number

先查询A表所有id,以及对应B表记录的 number 总和

方案一

select A.id, sum(B.number) as sum_number from A 
left join B on A.id = B.a_id 
where B........
group by A.id

方案二
先第一条sql查出A表所有id值,再查第二条sql,第二条没有的id,number总和设为0

select id from A;

select A.id, sum(B.number) as sum_number from B
left join A on A,id = B.a_id 
where B........
group by B.a_id;

都试了下,方案二快很多
求指导下原因

阅读 5k
1 个回答

left join 从左表读一条,选出所有匹配的右表纪录进行连接,形成n条纪录,由此方案一可能进行了B表几千次遍历(如果where中的字段或者b.id没有索引的话),方案二就不会这样。

这是一个猜想,你可以explain一下看看

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题