본문 바로가기
Spring

페치조인 (Fetch Join)

by 리승우 2022. 11. 7.

> SQL조인종류는 아니다.

 

> 연관된 Entity나 컬렉션을 SQL한번에 함께 조회하는 성능 최적화 방법이다.

ex) member를 조회할 때 연관된 team을 한번에 끌고와서 join한다 

=> 핵심 : 연관된 엔티티를 한번에 최적화해서 조회!

※ 쿼리가 2번 날아갈 상황을 쿼리 1번으로 조회할 수 있게 해준다.

※ 지연로딩으로 설정했어도, 즉시 조회하게 된다 (LAZY무시)

 

Join, Fetch Join 차이점

[ 일반 Join ]

- Fetch Join과 달리 연관 Entity에 Join을 걸어도 실제 쿼리에서 SELECT 하는 Entity는 오직 JPQL에서 조회하는 

주체가 되는 Entity만 조회하여 영속화

- 조회의 주체가 되는 Entity만 SELECT 해서 영속화하기 때문에 데이터는 필요하지 않지만 연관 Entity가

검색 조건에는 필요한 경우에 주로 사용한다.

[ Fetch Join ]

- 조회의 주체가 되는 Entity 이외에 Fetch Join이 걸린 연관 Entity도 함께 SELECT 하여 모두 영속화

- Fetch Join이 걸린 Entity 모두 영속화하기 때문에 FetchType이 LAZY인 Entity를 참조하더라도 이미 영속성 컨텍스트

안에 들어있기 때문에 따로 쿼리가 실행되지 않은 채로 N+1 문제가 해결됨

댓글