카테고리 없음
[JPA] N+1 이슈
extra_
2022. 12. 20. 21:53
Member, Order 엔티티에서
- 즉시로딩, entityManager
- 쿼리 두번 조회가 아닌 조인 사용
- 즉시로딩, JPQL
- 쿼리 두번 조회
- 지연로딩, JPQL
- 주문 컬렉션은 조회되지 않고 지연됨(n개의 쿼리는 나중에라도 실행됨)
- LAZY로딩은 해결방안이 아님
- 페치조인, JPQL
- inner join으로 조회됨 (해결)
- 일대다 조인을 사용했으므로 distinct를 사용해 중복을 제거하는 것이 좋음
- hibernate에서 제공하는 @BatchSize 어노테이션
- in( ?, ?, ...) 절을 사용해서 조회
- (size=n) 을 설정할 수도 있고 properties 파일에서 설정할 수도 있다.
- hibernate에서 제공하는 @Fetch(FetchMode.SUBSELECT)
- 즉시로딩, 지연로딩 둘 다 가능
- subselect 쿼리 -> where 절 안에 select를 다시 사용해서 조회한다.
- @OneToOne, @ManyToOne : 기본 전략이 즉시로딩 -> 지연로딩으로 바꿔서 성능최적화를 이끌어내기
- @OneToMany, @ManyToMany : 기본 전략이 지연로딩