본문 바로가기
Spring

[TIL] 230201 N+1 문제 해결 Join fetch, BatchSize

by studymode 2024. 2. 1.

 

Dynamic

  • Entity Graph (JPA)
    • Hibernate하는 힌트를 줌
    • table간의 관계를 보여줌
    • left outer join (상대쪽을 불러올 수 없음)
    • 관계없는 collerction을 조회할 경우 N+1문제 다시 발생
  • Join fetch (JPA)
    • EntityGraph와 같이 hibernate의 힌트를 줌
    • inner Join으로 연결

 

Static

  • @Batch Size
    • N+1 문제를 N/batchSize +1 로 변경해줌
    • 한개만 조회하고 싶어도 batch size 설정한 만큼 조회된다는 단점이 있음
  • @Fetch (subselect)
    • N+1 을 1+1로 바꿔줌

 

 

 

 

FetchJoin

OneToMany FetchJoin

fetchjoin을 사용하여 중복된 데이터가 조회될 때

Hibernate.initialize를 호출해 child entity를 초기화 해주거나

distinct()를 사용하여 중복 제거

 

https://studyandwrite.tistory.com/477

 

@OneToMany 관계에서 Fetch Join의 사용과 페이징 처리 문제

1. 상황 회원(Member)과 주문(Orders), 주문상품(OrderItem), 상품(Item)이라는 네 개의 엔티티를 중심으로 @OneToMany 관계에서 Fetch Join의 사용과 페이징 처리 문제에 대해 다뤄보겠습니다. 우선 간단한 엔티

studyandwrite.tistory.com

https://tmdrl5779.tistory.com/176

 

[JPA] One To Many에서 join fetch ( 페이징 )

페치 조인(fetch join)은 엔티티를 한번에 조회하게 최적화를 해준다. x To one 관계에서는 join fetch 를 해도되지만 one To many 에서는 Data 수가 many쪽에 맞춰 지면서 뻥튀기가 된다. public class Order { @Id @Ge

tmdrl5779.tistory.com

https://blog.leocat.kr/notes/2020/01/13/querydsl-duplication-problem-on-fetchjoin-with-onetomany

 

[Querydsl] OneToMany 관계에서 fetchjoin 시 데이터 중복 문제

OneToMany 관계의 entity를 Querydsl로 조회할 때 fetchjoin을 사용하면 데이터가 중복되어 조회될 수 있다.

blog.leocat.kr