> 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 문제가 해결됨
'Spring' 카테고리의 다른 글
Transactional / 동시성 제어 / DB Replication (Master-Slave) 관련정보 (0) | 2022.11.26 |
---|---|
Querydsl 관련정보 (0) | 2022.11.21 |
JOIN종류 / ON절의 의미 / Query 조회기능 최적화 팁 (0) | 2022.11.07 |
Elasticsearch란? (작성중) (0) | 2022.11.05 |
ExceptionHandler / ControllerAdvice 사용법 (0) | 2022.11.03 |
댓글