プロが教えるわが家の防犯対策術!

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

A 回答 (4件)

統計情報なしのデフォルトということはオプティマイザはルールベースで実行されます。


ルールベースはSQLの書き方(WHERE句の構文等)とインデックス情報によってどのようにアクセスするか決定します。

>現在、あるSQLの速度が遅いのですが、SQLの構成を替える前に「統計情報なしのデフォルト」から「統計情報を取る」に変更すべきか分かりません。

そのシステムが「運用中」なのか「開発中」なのかで多少状況が変わりますが、「運用中」であるなら『「統計情報を取る」に変更』することは控えたほうが良いと思います。
「統計情報を取る」ようにしたことで他のSQLが遅くなる「可能性」があるためです。統計情報をとりたいのであればどのようなタイミング、間隔でどのオブジェクトに対し統計情報を取るかなどいろいろ決める必要があります。

遅いSQLがわかっているのであれば、SQLTRACEなどで実行計画を確認し、そのSQLに対し遅い原因を解消してあげるべきだと思います。
#統計情報を取ったからといってすべてのSQLが速くなるワケではないので。

#参考URLの記事は若干古いバージョンのものですが、基本となる考えは変わりませんので参考になると思います。
#統計情報は9iの場合はdbms_statsパッケージを使います。

参考URL:http://www.int21.co.jp/pcdn/oracle/article/optim …
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/12/21 19:09

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2006/12/21 19:11

#1です。



>この統計情報のデフォルト値は、OPTIMIZER_MODE が FIRST_ROW または ALL_ROWS になっている場合 (つまり、コストベースオプティマイザを使用) で、かつ対象オブジェクトに統計情報が存在しない場合に使われます。

言い忘れていましたが、私の言っていたのはOPTIMIZER_MODEがchooseの場合です。(デフォルトと書いてあったのでFIRST_ROW または ALL_ROWSは考えてませんでした)
#勉強になりました>entreeさん
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/12/21 19:11

統計情報のデフォルト値はブロック数、平均レコード長、カーディナリティなどがあり、ハードコーディングされています。

(つまり、計算されているわけではなく、いかなる表や索引に対しても固定値が使用されます。具体的な値が知りたい場合は保守契約をしてください)

この統計情報のデフォルト値は、OPTIMIZER_MODE が FIRST_ROW または ALL_ROWS になっている場合 (つまり、コストベースオプティマイザを使用) で、かつ対象オブジェクトに統計情報が存在しない場合に使われます。

> 現在、あるSQLの速度が遅いのですが、

開発中なら統計情報を取ってもいいと思いますが、本番運用中であれば影響範囲を最小限にするために、ヒント句を使用するのが一般的でしょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/12/21 19:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!