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