MYSQL에서는 맨아래 A번 처럼 한번에 다중 INSERT가 가능한데요
저렇게 다중으로 하는경우와 소스단에서 for문으로 단일 insert문을 돌리는경우
어느게 더 성능상에 더 빠른가요?
또 ORACLE로 포팅을 해야하는데요 . 이걸바꾸면 INSERT ALL을 통해서 변경이 가능한걸로 알고있는데
이또한 INSERT ALL을 쓰는게 나을까요 아니면 for문으로 단일 INSERT를 하는게 맞을까요?
검색해보니 INSERT ALL은 동일테이블이 아닌 다른테이블을 한꺼번에 insert할떄 쓴다고하는데
저의 경우에는 동일테이블에 여러 VALUES를 넣을려는게 목적이고 데이터 한번에 insert할 양은
최소 10개 ~ 최대 3만개를 안넘길것같습니다.
질문요약
1. MYSQL 다중 INSERT문 VS 로직상 FOR문으로 단일 INSERT문 호출
2. ORACLE INSERT ALL VS 로직상 FOR문으로 단일 INSERT문 호출
어느게 속도,성능상에 좋은건가요??
A. MYSQL 다중 INSERT
INSERT INTO
`test`
(
`test_id`,
`test_data`,
`mod_date`
)
VALUES
(
'T1',
'test data1',
NOW()
),
(
'T2',
'test data2',
NOW()
);
너무 작은 단위의 작업으로 쪼개서 빈번하게 호출하는 것 보다는
하나로 묶어 한번만 수행하는게 좋구요.
하나로 묶기에는 너무 큰 규모라면?
어느 정도 규모로 묶어 수행 횟수를 줄이는게 좋습니다.
INSERT ALL 은 전혀 다른거라 해당 없는 듯 하구요.
한방 쿼리인 INSERT ~ SELECT 형태가 유사하다고 볼 수 있겠네요.
INSERT INTO test(test_id, test_data, mod_date)
SELECT 'T1', 'test data1', sysdate FROM dual
UNION ALL SELECT 'T2', 'test data2', sysdate FROM dual
;
일정 단위로 묶어 처리하는 Array Processing 기법도 있습니다.
http://www.gurubee.net/article/12607
http://wiki.gurubee.net/pages/viewpage.action?pageId=26744690