INNER JOINのFROMはサブクエリの方が高速?(MySQL)

スロークエリのログを見てたら、JOINしてる重いsqlを発見。
これは改善しなくては・・w

ざっくり書くとこんな感じのSQL。

SELECT h.* FROM hoge as h
  INNER JOIN foo AS f ON h.id = f.id
  WHERE h.name = 'a' AND f.name = 'b';

ま、いわいる普通のINNER JOIN。

WHEREの条件にはindexが貼ってあるし、indexを参照してるようですが、explainで見るとrowsがやけに多い。
件数を減らす為に、JOIN前に絞り込み(サブクエリ)

SELECT h.* FROM ( SELECT * FROM hoge WHERE name = 'a') AS h
  INNER JOIN foo AS f ON h.id = f.id
  WHERE f.name = 'b';

これで、そこそこ早くなりました。
indexの貼り方とかによっては、早くならない(逆に遅くなる)場合もあるかもしれませんがw