ようこそ。睡眠不足なプログラマのチラ裏です。

テーブルの結合について


結合の基礎(MSDN)

結合は、FROM 句でも WHERE 句でも指定できます。FROM 句で結合条件を指定すると、WHERE 句で他の検索条件が指定された場合に区別しやすくなります。結合を指定する場合、FROM 句で指定することをお勧めします。

だよねえ。JOIN句を使っての結合。それがデファクトスタンダードでしょう。
WHERE句に結合条件があると、可読性が悪くてメンテナンス性悪すぎだと思う(おまけに目も疲れるし)。
これはSQL Serverに限った話ではなく、Oracleの場合でも、他のRDBでも同じこと。
そんなわけで、FROM句でJOINによる結合をしていただきたい・・・。



WHERE句で指定する結合条件や、結合するテーブルにもよるんだけど、
概ね、WHERE句で結合条件を指定するとネストループ結合*1し易く、
FROM句で結合条件を指定するとハッシュ結合*2し易いのではないかと思う。
ネストループ結合は、どうしてもコストがかかる傾向が強いので避けれるものなら避けたい気がします。



一般的に言って、ネストループ結合 < マージ結合 < ハッシュ結合(最も早い)の順で高速。
ただ、結合するテーブルのレコードの数が極端に違う場合には、必ずしもこの順番にならないこともある。
ちなみに、応答時間が重要なとき、つまり、処理がすべて終了するまでの時間を短くするよりも、
とにかく検索条件に合致した1レコードを出来るだけ早く返したいというような場合は、ネストループ結合で。
どんな結合の仕方になっているかは、実行計画で確認すればよろし。

*1:単純に二重ループを回してIndexスキャンをして結合する方法

*2:ネストループ結合の捜査方法で、ハッシュを利用した結合方法