본문 바로가기
728x90

JPQL4

[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 Group By 성능 개선 기본적으로 Mysql에서 Group By를 실행하면 실행 계획 Extra 컬럼에 Using temporary 또는 Using filesort가 발생된다. Using Temporary (임시 테이블) Group By 할때 Mysql 엔진이 스토리지 엔진으로부터 받아온 레코드를 내부적으로 임시 테이블을 생성해서 사용한다. 메모리로 테이블을 생성했다가 테이블의 크기가 커지면 디스크로 옮겨지는 특성이 있기 때문에 디스크에 생성되면 이때 성능 이슈가 발생된다. Using filesort (드라이빙 정렬) 요구하는 조건이 인덱스를 통해 정렬을 할 수 없다면 FileSort를 사용하게 된다. 임시 테이블의 정렬도 FileSort에 해당된다. 그러므로 FileSort는 레코드가 많아질수록 성능이 많이 떨어지게 된다. .. 2022. 11. 23.
[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.
[Spring] Querydsl exists 성능 개선 테스트용 테이블 test1 생성하고 Date 값을 300만건 생성하였다. 조회 대한 테스트는 test1 테이블로 진행해보겠다. 조건에 대한 데이터가 존재하는지에 대한 쿼리 1. count로 조회하여 count > 0 조건으로 존재 여부를 파악할 때 select COUNT(*) > 0 from test1 where create_at > '2022-11-01'; 실행시간 : 331 ms 2. exist로 존재 여부를 파악할 때 select exists(select * from test1 where create_at > '2022-11-01'); 실행시간 : 10ms 두 가지 방식은 실행시간 차이가 많이 난다. 데이터양이 많아질수록 실행시간에 대한 차이는 더 커질 것이다. 이유는 정말 간단하다. 1번 방식은 .. 2022. 11. 20.
300x250