반응형
mybatis에서 INSERT ALL 사용하기 (오라클)
대용량 업로드를 할 때, INSERT ALL를 사용하면 속도가 더 빠르다는 이야기가 있다.
(환경에 따라 달라지겠지만) 실제로 해보니, 처리시간이 30%정도 감소되었다.
다른 사람들은 수 배에서 수 십 배가 더 빨라졌다는데, 이유는 모르겠는데 엄청나게 빨라지지는 않았고 하여튼 좀 빨라지긴 했다.
INSERT ALL를 사용하는 방법은 다음 샘플을 보고 작성하면 된다.
1. Dao 부분 (예시)
1
|
public void insertSQL(List<Map<String, String>> paramList) throws Exception;
|
cs |
DAO에서 넘겨주는 파라미터의 형식은 "List<Map<String, String>>"으로 넘겨주도록 하자.
주의사항
: 한 번에 수 백, 수 천 개의 리스트를 던져주면 mybatis에서 파라미터를 매핑해주는 속도가 현저히 느려진다.
너무 많은 배열을 보내면 out of memory가 발생할 수 있다.
경험상 100개 ~ 2000개 사이에서 적절하게 작업하면 됨...
2. xml 부분 (예시)
<insert id="insertSQL" parameterType="java.util.List">
INSERT ALL
<foreach collection="list" item="item" index="index" open="" separator=" " close="SELECT * FROM DUAL">
INTO TABLE_NAME
(TEST_ID, TEST_NAME, UPDATE_DATE, IP_ADDRESS)
VALUES
(#{item.test_id}
, #{item.test_name}
, SYSDATE
, (SELECT SYS_CONTEXT ('USERENV', 'IP_ADDRESS') FROM DUAL)
)
</foreach>
</insert>
반응형
'IT 자료' 카테고리의 다른 글
리눅스 폴더 소유자 변경 (0) | 2018.06.25 |
---|---|
java 엑셀 업로드 XSSFWorkbook 에러 (0) | 2018.06.18 |
jquery show hide 성능 (0) | 2018.05.21 |
spring 컨트롤러에서 파라미터 map으로 받기 (0) | 2018.05.15 |
크롬 inspected target crashed (0) | 2018.04.17 |