100 万行のデータを別のテーブルに移動したいと考えています。クエリを使用しています:
insert into Table1
select * from Table2;
私のPL/SQL関数で。しかし、この方法では遅すぎます。
一括挿入メソッドでこれを行うにはどうすればよいですか?
- ソース テーブルと宛先テーブルの構造は同じです。
- テーブルにはハッシュ パーティションと 1 つのインデックスがあります。
100 万行のデータを別のテーブルに移動したいと考えています。クエリを使用しています:
insert into Table1
select * from Table2;
私のPL/SQL関数で。しかし、この方法では遅すぎます。
一括挿入メソッドでこれを行うにはどうすればよいですか?
一括挿入は忘れてください。選択への挿入は、ロードできる最適なバルクであるためです。最も速いのは、インデックスを無効にし (使用不可としてマークする)、これを SINGLE 挿入で行うことです。
insert /*+ append */ into TARGET
select COLS
from SOURCE;
commit;
UNRECOVERABLE を使用してインデックスを再構築します (場合によっては、並列で行うこともできます)。
PS:テーブルが分割されている場合 (ソースとターゲットの両方で、並列挿入を使用することもできます)
ファローアップ:
以下の選択のパフォーマンスを確認してください
SELECT /*+ PARALLEL(A 4)
USE_HASH(A) ORDERED */
YOUR_COLS
FROM
YOUR_TABLE A
WHERE
ALL_CONDITIONS;
もっと早ければ
INSERT /*+ APPEND */
INTO
TARGET
SELECT /*+ PARALLEL(A 4)
USE_HASH(A) ORDERED */
YOUR_COLS
FROM
YOUR_TABLE A
WHERE
ALL_CONDITIONS;