• ベストアンサー

Oracle9の統計情報デフォルト

Oracle9の統計情報なしのデフォルトを使用してSQLを実行しているのですが、この「統計情報なしのデフォルト」とはどのようなものかご存知の方、あるいは参考情報を頂けないでしょうか? デフォルトと言うものはある程度の統計情報を計算してくれるものなのでしょうか? 現在、あるSQLの速度が遅いのですが、SQLの構成を替える前に「統計情報なしのデフォルト」から「統計情報を取る」に変更すべきか分かりません。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

統計情報なしのデフォルトということはオプティマイザはルールベースで実行されます。 ルールベースはSQLの書き方(WHERE句の構文等)とインデックス情報によってどのようにアクセスするか決定します。 >現在、あるSQLの速度が遅いのですが、SQLの構成を替える前に「統計情報なしのデフォルト」から「統計情報を取る」に変更すべきか分かりません。 そのシステムが「運用中」なのか「開発中」なのかで多少状況が変わりますが、「運用中」であるなら『「統計情報を取る」に変更』することは控えたほうが良いと思います。 「統計情報を取る」ようにしたことで他のSQLが遅くなる「可能性」があるためです。統計情報をとりたいのであればどのようなタイミング、間隔でどのオブジェクトに対し統計情報を取るかなどいろいろ決める必要があります。 遅いSQLがわかっているのであれば、SQLTRACEなどで実行計画を確認し、そのSQLに対し遅い原因を解消してあげるべきだと思います。 #統計情報を取ったからといってすべてのSQLが速くなるワケではないので。 #参考URLの記事は若干古いバージョンのものですが、基本となる考えは変わりませんので参考になると思います。 #統計情報は9iの場合はdbms_statsパッケージを使います。

参考URL:
http://www.int21.co.jp/pcdn/oracle/article/optimizer.html
totmon
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • MZ-80B
  • ベストアンサー率56% (46/81)
回答No.4

デフォルト統計は確かパフォチューガイドに掲載されています。

totmon
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。
回答No.3

#1です。 >この統計情報のデフォルト値は、OPTIMIZER_MODE が FIRST_ROW または ALL_ROWS になっている場合 (つまり、コストベースオプティマイザを使用) で、かつ対象オブジェクトに統計情報が存在しない場合に使われます。 言い忘れていましたが、私の言っていたのはOPTIMIZER_MODEがchooseの場合です。(デフォルトと書いてあったのでFIRST_ROW または ALL_ROWSは考えてませんでした) #勉強になりました>entreeさん

totmon
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。
  • entree
  • ベストアンサー率55% (405/735)
回答No.2

統計情報のデフォルト値はブロック数、平均レコード長、カーディナリティなどがあり、ハードコーディングされています。(つまり、計算されているわけではなく、いかなる表や索引に対しても固定値が使用されます。具体的な値が知りたい場合は保守契約をしてください) この統計情報のデフォルト値は、OPTIMIZER_MODE が FIRST_ROW または ALL_ROWS になっている場合 (つまり、コストベースオプティマイザを使用) で、かつ対象オブジェクトに統計情報が存在しない場合に使われます。 > 現在、あるSQLの速度が遅いのですが、 開発中なら統計情報を取ってもいいと思いますが、本番運用中であれば影響範囲を最小限にするために、ヒント句を使用するのが一般的でしょう。

totmon
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A