大量のレコードを高速でINSERTする方法

この記事では大量のレコードを高速でINSERTする方法について解説します。

 大量のレコードをINSERTする方法

通常レコードをINSERTする際は1レコードずつINSERT文を発行して行います。

この際に1レコードを追加する度にクエリが発行されるため、大量のレコードを追加する場合は負荷が大きくなります。

そこで1クエリで複数のレコードを一度にINSERTする処理をバルクINSERTといいます。

バルクINSERTを使えば大量のレコードを高速でINSERTすることができます。


 バルクINSERTの例

バルクINSERTでは配列にレコードの値を格納して、一度にINSERTを行います。

Oracle DatabaseではPL/SQLでバルクINSERTを実現できます。

バルクINSERTのPL/SQLは以下のような形式になります。

DECLARE
 TYPE ar1 IS TABLE OF EMP1%ROWTYPE INDEX BY BINARY_INTEGER;  emp_array ar1; BEGIN  FOR i IN 1 .. 10 LOOP   emp_array(i).EMPNO :=i;   emp_array(i).ENAME :='Suzuki';   emp_array(i).JOB :='Manager';  END LOOP;  FORALL I IN 1 .. 10 INSERT INTO EMP1 VALUES emp_array(i);  COMMIT; END; /

この例では「EMP1」表に対して10行のレコードをインサートしています。

まずは表レコード形式の配列を宣言し、値を格納します。

その後FORALL文を使ってバルクINSERTを実現します。