SQLを書く上でのパフォーマンスについて。


SQLのwhere句の順序によってパフォーマンスが違うようなことを聞いたことがあるような気がするのですが、どうなのでしょうか?

どんな順序に条件を入れるのがいいのか、指針となるような考え方?を教えてください。

インデックスがあるものからの方がいいとか、Likeは後に持っていった方がいいとか、joinするのは先がいいとかあったら教えてください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/01/24 16:32:46
  • 終了:2007/01/25 02:43:28

回答(2件)

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402007/01/24 17:54:41

ポイント40pt

そういうパフォーマンスチューニングはDBのオプティマイザの実装に寄って大きく変わるので、DBの種類を指定しないとまったく別の結論になりかねません。


Oracle の場合、FROM 句に指定する順番によってパフォーマンスに大きく差が出る可能性があります。

@IT:Oracle SQLチューニング講座(10) Page 1/4


WHERE 句の順番については大抵の場合オプティマイザが自動的に入れ替えてしまうので、比較的大きな差はでにくいと思います。

mysql:499

id:dingding

そういえば、Oracleを使っている時にその話を聞きました。

自動的に入れ替えるのは知りませんでした。

ありがとうございます。

2007/01/25 02:41:40
id:llusall No.2

llusall回答回数505ベストアンサー獲得回数612007/01/24 18:36:08

ポイント40pt

こちらいかがでしょうか?


Yahoo知恵袋 SQLのwhere条件の順序で、速度って変わるのでしょうか?

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail.php?qid=...


RDBMSを信じない人々~オプティマイザ

http://www2.t-next.com/home/kadoya/devlife/devlife05.html

※抜粋

まともなRDBMSにはオプティマイザが実装されています。オプティマイザというのは、我々が書いたSQLを解析して、求められているデータを最も少ない資源で、素早く抽出するには、どのような手段が適しているかを導き出す(SQL文の最適化を行う)機能のことです。最近のオプティマイザは賢いので、少々妙なSQLを書いてもそれなりの速度で結果を返してくれます。また未だにSELECT句に記述するフィールドの順番によって、応答時間が異なると信じている人がたまにいますが、オプティマイザが発達した今では無関係です


-----------------------------------------------------------------------------------------

※お使いのDBの種類やバージョンにより、コストベース、ルールベースの違いがあるでしょうから、

実際に実行計画を比較するなどして確認してみるのが一番かと思います。


その他、チューニングに関して、私の参考としているページを紹介します。

■SQLを速くするぞ

http://www.geocities.jp/mickindex/database/db_optimize.html

■忘れっぽいエンジニアのオラクルSQLリファレンス

http://oracle.se-free.com/tuning/tuning.html

■MIZOBUCHI'S HOME PAGE Oracle DBMS入門

http://www.t3.rim.or.jp/~buchi/rdb.html

id:dingding

ありがとうございます。

とてもためになりそうなサイトも教えていただきまして大変感謝します。

2007/01/25 02:42:52

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません