インデックス

今、会社でDBの勉強会をやってます。
※以下はPostgreSQL8.3でのお話です。

テーブル「foo」「bar」があり、これらが1:Nの関係の場合ですが、
以下のように結合してみます。


その前に、「bar」テーブルに対して「foo_id」でインデックスを作っておきます。


サンプル1
select * from foo,bar where foo.name = 'hoge' and foo.id = bar.foo_id;

自分の中では、「foo_id」のインデックスが使われると思っていたんだけど、
「EXPLAIN」で調べるとこれが、使われていない。


当たり前ですが、こっちのSQLだとインデックスが使われます。


サンプル2
select * from bar where bar.foo_id = (select id from foo where foo.name = 'hoge');

今まで、こんなSQLいっぱい書いてきたんだけど、
EXPLAINが示すように今までの自分が間違ってたのか?
それとも何か間違ってるんかな?


1と2だと取得してる情報が違うからしょうがないか。
1だとfooとbarを結合しちゃうもんな。
うーんどうなんだろう。
1でもインデックス使われてもいいと思うんだけどなぁ。