[Oracle] 다 건 삽입(MULTIPLE INSERT) 속도 비교
1. 다 건 삽입(INSERT) 방법
아래 두 가지 방법에 대해 속보 비교를 해보려고 한다.
결론부터 말하면, UNION ALL 방식이 매우 더 빨랐다.
01) INSERT ALL을 사용하는 방법
기본적인 사용 방법은 다음과 같다.
INSERT ALL
INTO [테이블] ( [COLUMN1], [COLUMN2], ...) VALUES ( [VALUE1], [VALUE2], ...)
INTO [테이블] ( [COLUMN1], [COLUMN2], ...) VALUES ( [VALUE1], [VALUE2], ...)
...
INTO [테이블] ( [COLUMN1], [COLUMN2], ...) VALUES ( [VALUE1], [VALUE2], ...)
SELECT * FROM DUAL;
가장 하단의 SELECT * FROM DUAL이 없으면 오류가 발생한다.
이유를 아시는분 설명 해주시면 정말 감사히 배우겠습니다.
02) UNION ALL을 사용하는 방법
기본적인 사용 방법은 다음과 같다.
INSERT INTO [테이블] ([COLUMN1], [COLUMN2], ...)
SELECT ([VALUE1], [VALUE2], ...) FROM DUAL UNION ALL
SELECT ([VALUE1], [VALUE2], ...) FROM DUAL UNION ALL
...
SELECT ([VALUE1], [VALUE2], ...) FROM DUAL;
2. 속도 비교 결과
1,000건 삽입 기준으로, 다음과 같은 결과가 나왔다.
01) INSERT ALL
1,000건 : 437.865초
02) UNION ALL
1,000건 : 0.06초
UNION ALL은 추가 테스트로, 10,000건도 진행해 보았다.
10,000건 : 24.635초
3. 예시 및 소스 (복뿟)
01) 테이블 생성
CREATE TABLE TEST (
A_COM VARCHAR2(20),
B_COL VARCHAR2(20),
C_COL VARCHAR2(20)
);
02) 데이터 삽입
-- INSERT ALL 방식
INSERT ALL
INTO TEST ( A_COM, B_COL, C_COL ) VALUES ('val01','val02','val03')
INTO TEST ( A_COM, B_COL, C_COL ) VALUES ('val01','val02','val03')
...
INTO TEST ( A_COM, B_COL, C_COL ) VALUES ('val01','val02','val03')
SELECT * FROM DUAL;
);
-- UNION ALL 방식
INSERT INTO TEST ( A_COM, B_COL, C_COL )
SELECT ('val01','val02','val03') FROM DUAL UNION ALL
SELECT ('val01','val02','val03') FROM DUAL UNION ALL
...
SELECT ('val01','val02','val03') FROM DUAL;