通常のIUNSERT文でLARGE_TBL表へレコードを格納
実行コマンドBEGIN
FOR i IN 1 .. 100000 LOOP
INSERT INTO LARGE_TBL VALUES (i, ‘foobar’);
END LOOP
COMMIT;
END;
FOR i IN 1 .. 100000 LOOP
INSERT INTO LARGE_TBL VALUES (i, ‘foobar’);
END LOOP
COMMIT;
END;
大量のレコードのINSERTを高速化する方法
1レコードづつINSERT文を発行する場合、1レコード=1クエリとなり、
大量のレコードを作成しようとするとレコードと同じ数のクエリを発行
する必要があり、 ひじょうに負荷が上がることが想定されます。
そこであらかじめ配列変数に複数レコードの値をセットしておき、それを1回の
クエリでINSERTすることを可能にするのがバルクINSERTと呼ばれる機能がある。
実行コマンドCREATE TABLE LAGRGE_TABLE (ID NUMBER, VALUE VARCHAR2(50));
実行コマンドDECLARE
TYPE tbl_ins IS TABLE OF LARGE_TBL%ROWTYPE INDEX BY BINARY_INTEGER;
w_ins tbl_ins;
TYPE tbl_ins IS TABLE OF LARGE_TBL%ROWTYPE INDEX BY BINARY_INTEGER;
w_ins tbl_ins;
実行コマンド
BEGIN
FOR i IN 1 .. 100000 LOOPw_ins(i).ID :=i;
w_ins(i).VALUE :=’foobar’;
BEGIN
FOR i IN 1 .. 100000 LOOPw_ins(i).ID :=i;
w_ins(i).VALUE :=’foobar’;
END LOOP;
FORALL i in 1 .. 100000 INSERT INTO LARGE_TBL VALUES w_ins(i);
COMMIT;
END;
コメントを残す