質問: b.xxx.id
回答: (select * from a ・・・ group by id ) と (select * from b where ・・・ group by xxx) の結果は何件なのでしょうか? それぞれ、100件、50件と仮にすると、 aは1万件、b は10万件なので、 1 のsqlは、1万件と50件を結合して、それをidでgroup byしている。 2 のsqlは、1万件からidでgroup byした結果の100件と50件を結合している。 aもbもインデックスが絡んでいないとすると、 1万件と50件を結合する速度と100件と50件を結合する速度の差では? idにインデックスがはってあれば、 (id,x,y,z等の先頭にidがある複合したインデックスでもいいですが) 2 のsqlは、1万件からidでgroup byするのにインデックスを利用できるので 1 のsqlの結合結果をgroup byするときにインデックスが利用できないのに比べて早くなる。