3

100 万行のデータを別のテーブルに移動したいと考えています。クエリを使用しています:

insert into Table1
select * from Table2;

私のPL/SQL関数で。しかし、この方法では遅すぎます。

一括挿入メソッドでこれを行うにはどうすればよいですか?

  • ソース テーブルと宛先テーブルの構造は同じです。
  • テーブルにはハッシュ パーティションと 1 つのインデックスがあります。
4

2 に答える 2

5

一括挿入は忘れてください。選択への挿入は、ロードできる最適なバルクであるためです。最も速いのは、インデックスを無効にし (使用不可としてマークする)、これを 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;
于 2013-11-07T14:41:06.263 に答える