728x90
반응형
엑셀파일을 읽어서 단건으로 주소록을 입력하는 로직이 있었다.
해당 로직은 100건 ~ 1000건 정도의 주소록을 입력할 때는 크게 인서트 속도에 문제되지 않았으나
5000건에서 1만건이 넘어가는 엑셀파일을 읽고 인서트하는 과정에서 속도 이슈가 발생하였다.
속도 이슈를 해결하고자 단건으로 인서트 하고 있는 SQL문을 foreach로 변경하였다.
변경 전
XML <insert id="insertAddress" parameterType="address"> INSERT INTO Address ( address_id, group_id, user_name, min, email, company, department, position, phone_company, phone_dep, phone_dep_pre, fax, home_post_no, home_addr_a, home_addr_b, company_post_no, company_addr_a, company_addr_b, birth, birth_kind, anniversary, anniversary_kind, homepage, email_more_a, email_more_b, min_more, memo, ctime, inter_code, user_id ) VALUES ( #{address_id}, #{group_id}, #{user_name}, #{min}, #{email}, #{company}, #{department}, #{position}, #{phone_company}, #{phone_dep}, #{phone_dep_pre}, #{fax}, #{home_post_no}, #{home_addr_a}, #{home_addr_b}, #{company_post_no}, #{company_addr_a}, #{company_addr_b}, #{birth}, #{birth_kind}, #{anniversary}, #{anniversary_kind}, #{homepage}, #{email_more_a}, #{email_more_b}, #{min_more}, #{memo}, TO_CHAR(SYSDATE, 'YYYYMMDDHHMISS'), #{inter_code}, #{user_id} ) </insert> |
변경 후
XML <insert id="insertAddressExcel" parameterType="java.util.List"> INSERT INTO Address ( address_id, group_id, user_name, min, email, company, department, position, phone_company, phone_dep, phone_dep_pre, fax, home_post_no, home_addr_a, home_addr_b, company_post_no, company_addr_a, company_addr_b, birth, birth_kind, anniversary, anniversary_kind, homepage, email_more_a, email_more_b, min_more, memo, ctime, inter_code, user_id ) VALUES <foreach collection="list" item="item" separator=" , " > ( "${item.address_id}", "${item.group_id}", "${item.user_name}", "${item.min}", "${item.email}", "${item.company}", "${item.department}", "${item.position}", "${item.phone_company}", "${item.phone_dep}", "${item.phone_dep_pre}", "${item.fax}", "${item.home_post_no}", "${item.home_addr_a}", "${item.home_addr_b}", "${item.company_post_no}", "${item.company_addr_a}", "${item.company_addr_b}", "${item.birth}", "${item.birth_kind}", "${item.anniversary}", "${item.anniversary_kind}", "${item.homepage}", "${item.email_more_a}", "${item.email_more_b}", "${item.min_more}", "${item.memo}", TO_CHAR(SYSDATE, 'YYYYMMDDHHMISS'), "${item.inter_code}", "${item.user_id}" ) </foreach> </insert> |
반응형
<<<변경전>>> public int insertAddress(Address param); addressDao.insertAddress(addr); |
<<<변경후>>> public int insertAddressExcel(List<Address> param); List addrList = new ArrayList(); addrList.add(addr); addressDao.insertAddressExcel(addrList); |
728x90
반응형
'IT > WEB' 카테고리의 다른 글
[JAVA] executeBatch 예외 처리 해결 (에러 무시하고 인서트) (1) | 2022.05.19 |
---|---|
[JAVA] JDBC 대량 인서트 성능 향상 (addBatch, executeBatch) (0) | 2022.05.18 |
[JS] Select Box 에서 readonly 설정하기 (0) | 2022.04.22 |
java.lang.ArrayIndexOutOfBoundsException: 1 에러 split() NULL 처리, 예외 처리 (0) | 2021.11.15 |
[JS] JS를 임시 비밀번호 만들기(소문자, 대문자, 숫자, 특수문자 혼합) (0) | 2021.11.03 |