簡単な質問です。テーブルにデータを入力した後、説明プランを通じて、ほとんどの場合、インデックスはGATHER_TABLE_STATS
を実行した後にのみ有効になるように見えることに気付きました。
Exec DBMS_STATS.GATHER_TABLE_STATS(ownname => 'USER/SCHEMA', tabname => 'MYTABLE', cascade=> true, degree=> 8);
"[〜#〜] cascade [〜#〜]"属性は次のように定義されました:このテーブルのインデックス。インデックス統計の収集は並列化されていません。このオプションを使用することは、テーブルの各インデックスでGATHER_INDEX_STATS
プロシージャを実行することと同じです。
私の質問は、インデックスの統計情報を収集して再構築することを想定しているので、GATHER_TABLE_STATS
の前にインデックスのREBUILD
を実行する必要がありますIS NOT同じことです、 またはそれは?
現時点では、dbms_index_utl.build_table_indexes
を実行してインデックスを再構築し、その後にGATHER_TABLE_STATS
を実行します。必要かどうかはわかりませんが、説明プランにそれが示されているようです。私のクエリへのヒント、インデックスは使用されません。
統計の収集とインデックスの再構築は、2つのまったく別のものです。
すべてのインデックスを再構築した場合、インデックスに関する統計を収集する必要はありません。 10g以降、「Oracleデータベースは、インデックスの作成および再構築中に自動的に統計を収集するようになったため」 COMPUTE STATISTICS
オプションは廃止されました。
テーブルの統計を収集すると役立つ場合がありますが、cascade => false
を設定すると時間を節約できます。