この記事では大量のレコードを高速で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を実現します。