sql >> データベース >  >> RDS >> Oracle

Oracle11g-複数の行を挿入する最も効率的な方法

    ダイレクトパス挿入 を試すことができます 操作を高速化するためですが、100レコードの場合、従来のパス挿入は十分に高速である必要があり、問題は多数のソースからログに挿入する際のテーブルのロックにあるようです。

    ダイレクトパス挿入を使用するようにOracleに指示するには、追加 または APPEND_VALUES 挿入ステートメントの構文に応じたヒント。例:

    insert /*+ APPEND */ 
    into multi_insert(val_1, val_2)
    select * from (
      select 100,    20 from dual union all
      select 21,      2 from dual union all
      select 321,    10 from dual union all
      select 22,     13 from dual union all
      select 14,    121 from dual union all
      select 11,    112 from dual union all
      select 112,    23 from dual union all
      select 132,  2323 from dual union all
      select 121,    34 from dual union all
      select 24333, 333 from dual union all
      select 1232, 3434 from dual union all
      select 4554, 3434 from dual union all
      select 3434,  211 from dual union all
      select 3434, 1233 from dual union all
      select 12,     22 from dual union all
      select 356,   233 from dual union all
      select 9347,   23 from dual union all
      select 8904,  245 from dual union all
      select 342,  4545 from dual union all
      select 453,   233 from dual
    )
    

    挿入ステートメントがPL/SQLコードから作成された場合は、forallステートメントで一括挿入を使用してパフォーマンスを向上させることができます( SQLFiddle ):

    declare
      type TRowList is table of multi_insert%rowtype index by binary_integer;
    
      vRowList TRowList;
      vRow     multi_insert%rowtype;
    begin
    
    
      vRow.val_1 := 100;
      vRow.val_2 := 20;
      vRowList(0) := vRow;
    
      vRow.val_1 := 21;
      vRow.val_2 := 2;
      vRowList(1) := vRow;
    
      vRow.val_1 := 321;
      vRow.val_2 := 10;
      vRowList(2) := vRow;
    
      -- ...
    
      forall vIdx in vRowList.first .. vRowList.last
            insert /*+ APPEND_VALUES */  -- direct path insert
            into multi_insert values vRowList(vIdx);
    
    end;
    


    1. MySQL8.0用のPerconaServerを使用して暗号化されたデータベースをバックアップする方法

    2. SQLServerのxmlで最後からn番目の要素を取得する

    3. テーブルから重複を削除します

    4. JDK8を使用するMacOSにOracleSQLDeveloper19.1をインストールします。