- PR -

WHERE句の指定順序とパフォーマンス

1
投稿者投稿内容
トロ
会議室デビュー日: 2005/01/23
投稿数: 10
投稿日時: 2005-06-14 00:51
今日会社内でコードレビューを行っていたところ、
先輩方が「WHERE句の記述順が悪い。これじゃ時間がかかる」と指摘していました。
指摘された本人も私もどうして記述順でスピードが異なるのかが理解できませんでした。

先輩方に聞いても「実践で得たものだから」と詳しい理由は知らないようです。


  1. テーブルの結合をWHERE句の始めに記述する
    コード:
    SELECT A.COL1, B.COL2, A.COL3 FROM TABLE1 A, TABLE2 B 
    
    WHERE A.COL1=B.COL1 AND A.COL1=1;


  2. テーブルの結合をWHERE句の最後に記述する
    コード:
    SELECT A.COL1, B.COL2, A.COL3 FROM TABLE1 A, TABLE2 B 
    
    WHERE A.COL1=1 AND A.COL1=B.COL1;



で本当にスピードの差って出るものなのでしょうか?
もし差が出る場合、理由も教えていただけると嬉しいです。
(上のSQLじゃ比較にならないかもしれませんが…)

また、SQLの実行スピードに影響するような注意点などが書いてある
サイトor書籍の情報をいただけませんでしょうか?

分かりにくい文章ですいません。
よろしくお願いします。

書き忘れましたが、使用DBはOracle9iです。

[ メッセージ編集済み 編集者: トロ 編集日時 2005-06-14 00:55 ]
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2005-06-14 08:45
実行プランが本当に異なるのか比べてみたら?

9i なら同じプランになりそうな気がするけど、昔のルールベースオプティマイザな Oracle は確かに from 句に書くテーブルの順序や where 句に書く結合条件、抽出条件の順序によって実行プランが決定されていたらしい。なので、そのレビューで指摘した人は 古い Oracle 使いなんだろうと思う。
もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2005-06-14 08:53
9.2.0 とかだと動的サンプリングだかなんだかで勝手に統計を取って
コストベースで動いたりしますが、コストベースで動くと ORDERED
ヒントでも付けない限り順番なんて関係ないはず。

むしろ統計情報を取っているかとか索引を付けるべきかとかそういう話を
した方がよさげ。

# んで、未記入殿のおっしゃるとおり実行プランを確認、と。
# とりあえず SQL トレースでも。
あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2005-06-14 09:48
まず、コストベースの場合はOracleが内部的にSQL文を適切な形に変換してから実行するので性能に影響はありません。

ルールベースの場合は、FROM句の順序やインデックスを作成した順序は実行計画に影響を与えますが、WHERE句の順番が実行計画に影響を与えるということはまずありません。ANDの場合は下から、ORの場合は上から評価されるという話は少しだけ聞いたことがありますが・・・。

また、ルールベースはなくなる方向にあり、Oracle 10gでは既にサポート対象外になっています。

とりあえずは、他の方もおっしゃられているように、実行計画を取得するのがよいと思います。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2005-06-14 12:08
一応、参考リンク↓。
http://www.atmarkit.co.jp/fdb/rensai/rdbmsarc05/rdbmsarc05_1.html

ところで、「WHERE 句に指定された列の順番によっては、適切なインデックスが使用されない場合がある」ってのは、ルールかコストかに依らない、という話を聞いた事もあるんですが、それって昔の話なんですか? あれ? そもそも順番は関係なかった?
トロ
会議室デビュー日: 2005/01/23
投稿数: 10
投稿日時: 2005-06-14 22:14
みなさん、ありがとうございます。

実行計画のやり方から調べていたので時間がかかってしまいましたが、
2つのSQLの差はありませんでした。

でも先輩が指摘したから直さないといけないんですよねぇ...。

きくちゃんが教えてくださったリンク、とっても参考になります。

普段、取得結果ばかりを気にしてて、パフォーマンスを全く気にしていませんでした。
これからは気をつけて、そして勉強していきます。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2005-06-14 22:27
どうぞ。

http://otn.oracle.co.jp/cgi-bin/non/msgview_r.cgi?communityid=otn-901234&bbsid=1&no=10434&view=8
1

スキルアップ/キャリアアップ(JOB@IT)