본문 바로가기
728x90

MYSQL5

[Spring] Bulk Insert 성능 개선 이전에 Querydsl Bulk Update 성능 개선 글을 포스팅했고 이번에는 Bulk Insert에 대한 내용을 다루려고 한다. 아마 Querydsl의 블로그 마지막 편이 아닐까 싶다. 좋은 공부 거리가 있으면 다시 포스팅할 수도... JDBC에는 rewirteBatchedStatements라고 해서 Insert 합치기 옵션이 있다. 이 옵션이 활성화되어 있어도 JPA에서는 auto_increment 일 때 Insert 합차기 기능이 적용되지 않는다. JPA를 이용한 Bulk Insert와 JDBC를 이용한 Bulk Insert를 비교해보자. 1. JPA Bulk Insert public void jpaBulkInsert() { List bulk = Lists.newArrayList(); for(in.. 2022. 11. 27.
[Spring] Querydsl Select 성능 개선 1. 테스트 테이블 관계 생성 @Entity public class Shop { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private Long shopNo; private String name; @OneToOne(mappedBy = "shop") private License license; } @Entity public class License { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private Long licenseNo; private String name; @OneToOne @JoinColumn(name = "sho.. 2022. 11. 22.
[MySQL] INDEX 최적화 - 2 (feat. 커버링, 컨디션 푸시다운) [MySQL] INDEX 최적화 - 1 글에 이어 두 번째 정리를 해야겠다. 커버링 인덱스 처음 글에 정리했던 것처럼 인덱스는 데이터를 효율적으로 탐색해서 디스크 I/O를 줄이는 게 하는 방법이라고 했다. 커버링 인덱스는 쿼리를 충족하는데 필요한 모든 데이터를 갖는 인덱스를 말한다. WHERE절에 대한 쿼리에 인덱스 컬럼을 걸어 사용하는 것 이외에 SELECT / GROUP BY / ORDER BY 등에 활용되는 모든 컬럼의 인덱스의 구성 요소를 뜻한다. 인덱스를 사용하여 처리하는 부분 중에 가장 큰 부하를 차치하는 부분은 인덱스 검색에서 일치하는 키 값의 레코드를 읽는 것이다. 위의 그림처럼 인덱스 탐색에서 일치하는 키 값의 데이터를 조회하기 위해서 추가적인 디스크 I/O가 발생하게 된다. N번의 인덱.. 2022. 11. 17.
[MySQL] INDEX 최적화 - 1 인덱스를 왜 써야 할까? 데이터베이스의 성능은 디스크 I/O 영향이 크다 디스크와 메모리 I/O의 속도 차이는 10만 ~ 15만 배 정도로 차이가 크다. 요즘은 성능이 좋은 SSD도 보편화되었지만 그래도 메모리에 비해 많이 느리다. 즉, 성능 개선은 디스크 I/O를 줄이는 게 핵심이다. 인덱스를 사용하면 조회는 빨라지지만 데이터 생성, 수정, 삭제는 느려지는데 그럼에도 불구하고 우리는 왜 인덱스를 써야 할까? 웹 서비스에서 CUD와 R의 비율은 9:1 또는 8:2 정도라고 한다. GET 요청이 압도적으로 발생하기 때문에 전체적인 성능 이점을 취하기 위해 조회 성능 개선에 중점을 둔다. player table create index idx_game_nickname on player (game, nickna.. 2022. 11. 16.
300x250