본문 바로가기
IT 자료

mybatis에서 INSERT ALL 사용하기

by 성곤 2018. 6. 18.
반응형


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>

 

 

반응형