举个例子,两张表: 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;
都试了下,方案二快很多
求指导下原因
left join 从左表读一条,选出所有匹配的右表纪录进行连接,形成n条纪录,由此方案一可能进行了B表几千次遍历(如果where中的字段或者b.id没有索引的话),方案二就不会这样。
这是一个猜想,你可以explain一下看看