[강의]스프링 부트와 JPA 활용2 - 컬렉션 조회 최적화
컬렉션 조회 최적화
XToOne 관계에서는 fetch join으로 쿼리수를 최적화한다.
컬렉션은 fetch join 시 페이징이 불가능
하다.
컬렉션은 fetch join 대신에 지연로딩을 유지하면서
hibernate.default_batch_fetch_size , @BatchSize 로 최적화한다.
권장 순서
1. 엔터티 조회 방식으로 우선 접근한다.
1. fetch join으로 쿼리 수를 최적화한다.
2. 컬렉션 최적화
1. 페이징 필요 : hibernate.default_batch_fetch_size , @BatchSize 로 최적화한다.
2. 페이징 필요X : fetch join을 사용한다.
2. 엔티티 조회방식으로 해결이 안되면 DTO조회방식으로 JPA에서 DTO를 직접 조회한다.
3. SQL
hibernate.default_batch_fetch_size는 글로벌 설정이다.
spring:
jpa:
properties:
hibernate:
default_batch_fetch_size: 1000
개별로 설정하려면 @BatchSize 적용
대부분의 페이징 + 컬렉션 엔티티 조회 문제 해결법
페이징 + 컬렉션 엔티티를 함께 조회?
먼저 XToOne(OneToOne, ManyToOne) 관계를 모두 페치조인
한다.
ToOne 관계는 row수를 증가시키지 않으므로 페이징 쿼리에 영향을 주지 않는다.
컬렉션은 지연 로딩으로 조회한다.
지연 로딩 성능 최적화를 위해 hibernate.default_batch_fetch_size , @BatchSize 를 적용한다.
정리
XToOne 관계는 페치 조인해도 페이징에 영향이 없다.
따라서 XToOne 관계는 페치조인해서 쿼리 수를 줄이고
나머지는 hibernate.default_batch_fetch_size 로 최적화한다.