728x90
반응형
Service 로직에서 for문을 통해 insert하는 방법
1. 랜덤한 자료 10,000건 생성
// 랜덤으로 10000건의 데이터 생성
int count = 0;
List<Board> list = new ArrayList<Board>();
while(true) {
count++;
String title = RandomStringUtils.randomAlphabetic(10);
String contents = RandomStringUtils.randomAlphabetic(10);
list.add(new Board(title, contents));
if(count >= 10000) {
break;
}
}
* RandomStringUtils: commons-lang3 라이브러리 등록
2. Service 로직 (for문)
for(Board board : list) {
repository.save(board);
}
3. Insert 구문
INSERT INTO T_BOARD
(
TITLE,
CONTENTS,
REG_DATE
)
VALUES
(
#{title},
#{contents},
NOW()
)
4. 실행
boardService.saveList_loop(list);
SQL에서 foreach문을 사용해 insert하는 방법
1. 랜덤한 자료 10,000건 생성
// 랜덤으로 10000건의 데이터 생성
int count = 0;
List<Board> list = new ArrayList<Board>();
while(true) {
count++;
String title = RandomStringUtils.randomAlphabetic(10);
String contents = RandomStringUtils.randomAlphabetic(10);
list.add(new Board(title, contents));
if(count >= 10000) {
break;
}
}
* RandomStringUtils: commons-lang3 라이브러리 등록
2. Service 로직 (Map 전달)
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("list", list);
repository.saveList(paramMap);
3. Insert 구문 (foreach)
INSERT INTO T_BOARD
(
TITLE,
CONTENTS,
REG_DATE
)
VALUES
<foreach collection="list" item="board" separator=",">
(
#{board.title},
#{board.contents},
NOW()
)
</foreach>
4. 실행
boardService.saveList_map(list);
결과 비교
총 10,000 건의 데이터를 각각의 방법으로 insert 시켰다.
long start = System.currentTimeMillis();
// 실행
long end = System.currentTimeMillis();
logger.info("실행 시간: {}초", (end - start) / 1000.0);
1. for문 테스트 결과
실행 시간: 39.018초
2. foreach구문 테스트
실행 시간: 0.701초
속도 차이가 엄청나다!
100건까지는 첫 번째 방법을 이용해도 큰 차이 없지만, 그 이상의 경우 수십배의 차이가 나는 것을 볼 수 있다.
나의 경우 55배의 속도 차이가 발생했다.
첫 번째 방법의 경우 개수만큼 connection을 호출하기 때문에 데이터가 많을수록 그만큼 호출이 잦아져 처리 시간이 증가된다.
두 번째 방법의 경우 오직 한 번의 connection을 호출하기 때문에 데이터가 많던 적던 처리 시간이 짧다.
728x90
반응형
'Programming > Java' 카테고리의 다른 글
[Java] Enum 클래스 (열거체) 알아보기 (0) | 2021.07.23 |
---|---|
[예외처리] throw와 throws의 차이 (0) | 2020.09.27 |
[Ehcache] 간단한 캐시 구현 (@Cacheable, @CacheEvict) (2) | 2020.09.01 |