5

csvデータファイルからテーブルに大量の行をロードしています。10000 レコードごとに、最適化のためにテーブルのインデックスを更新します (統計の更新)。私が使用できるコマンドは何ですか?また、SQL Server の「UPDATE STATISTICS」とは、Oracle で同等のものです。更新統計とは、インデックスの最適化または統計の収集を意味します。Oracle 10g および 11g を使用しています。前もって感謝します。

4

2 に答える 2

8

インデックスの最適化は難しい問題です。インデックスを COALESCE して隣接する空のブロックを削除したり、インデックスを REBUILD して完全に破棄して再作成したりできます。私の意見では、データをロードしている間にやりたいことは、インデックスを UNUSABLE にして、完了したら再構築することです。

ALTER INDEX my_table_idx01 DISABLE;

-- run loader process

ALTER INDEX my_table_idx01 REBUILD;

完了時に統計を 1 回だけ収集する場合は、次のように DBMS_STATS を呼び出します。

EXEC DBMS_STATS.GATHER_TABLE_STATS ('my_schema', 'my_table');
于 2010-04-05T14:58:52.483 に答える
0

別のアプローチを取ることをお勧めします。インデックスを削除し、データをロードしてから、インデックスを再作成します。これを有効にすると、Oracleはロードしたデータに適切なインデックスを作成します。ここでは2つのことが達成されます。レコードの読み込みが速くなり、適切にバランスの取れたツリーでインデックスが再構築されます。(注:ここで注意してください。テーブルが非常に大きなテーブルである場合、それが機能するために一時表スペースを宣言する必要がある場合があります。)

drop index my_index;

-- uber awesome loading process

create index my_index on my_table(my_col1, my_col2);
于 2010-04-11T17:23:51.140 に答える