본문 바로가기
OraclE

벌크 insert 빠르게 하는 방법

by 타마마임팩트_쫀 2018. 3. 21.

기본적으로 100만개의 레코드를 벌크 인서트 할 때 아래 방법을 사용 합니다.

create table LARGE_TBL (id number, value varchar2(50));

 

begin

        for i in 1 .. 1000000 loop

                insert into large_tbl values (i,'foobar');

        end loop;

        commit;

end;

/

 

PL/SQL procedure successfully completed.

 

Elapsed: 00:00:40.53

 

call     count       cpu    elapsed       disk      query    current        rows

------- ------  -------- ---------- ---------- ---------- ----------  ----------

Parse        1      0.00       0.00          0          0          0           0

Execute 1000000     15.67      15.42         11       2838    1040617     1000000

Fetch        0      0.00       0.00          0          0          0           0

------- ------  -------- ---------- ---------- ---------- ----------  ----------

total   1000001     15.67      15.42         11       2838    1040617     1000000

 

그럼 테이블 레코드 형식의 배열에 값을 저장하고 한번에 insert 하면,

declare

        TYPE tbl_ins IS TABLE OF LARGE_TBL%ROWTYPE index by binary_integer;

        w_ins tbl_ins;

begin

        for i in 1 .. 1000000 loop

                w_ins(i).id := i;

                w_ins(i).value := 'foobar';

        end loop;

       

        forall i in 1 .. 1000000 insert into large_tbl values w_ins(i);

        commit;

end;

/

 

PL/SQL procedure successfully completed.

 

Elapsed: 00:00:01.26

 

call     count       cpu    elapsed       disk      query    current        rows

------- ------  -------- ---------- ---------- ---------- ----------  ----------

Parse        1      0.00       0.00          0          0          0           0

Execute      1      0.49       0.50         11       4804      24093     1000000

Fetch        0      0.00       0.00          0          0          0           0

------- ------  -------- ---------- ---------- ---------- ----------  ----------

total        2      0.49       0.51         11       4804      24093     1000000

 

느낌이 오시나요?

sql 실행 횟수가 줄어 듭니다.

'OraclE' 카테고리의 다른 글

active session history  (0) 2022.01.30
orange plan 테이블 생성  (0) 2022.01.30
RMAN backup set 에서 archivelog 추출하여 logminor 수행  (0) 2018.02.22
Oracle RAC 마스터 노드 찾기 (find Master Node)  (0) 2017.09.14
DATAPUMP 암호화  (0) 2017.01.19