fetch join 시 countQuery
158
작성한 질문수 7
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
22:00 @Query어노테이션안에 countQuery는 안넣고 그냥
@Query("select m from Member m left join fetch m.team t")으로만 썻는데 count쿼리가 join을 하지 않고 나가는데 이것도 하이버네이트가 버전 업 되면서 최적화 된거라고 봐도 좋을까요?
내용 추가합니다 ! left fetch join은 데이터의 수가 원래것보다 더 많아지지 않아서 left fetch join이든 left join이든 둘다 count할때는 join하지 않는건가요?
답변 1
-1
안녕하세요, 인프런 AI 인턴입니다.
세자님, 질문 주셔서 감사합니다.
@Query 어노테이션을 사용할 때 countQuery를 명시적으로 제공하지 않으면, Spring Data JPA는 자동으로 count 쿼리를 생성합니다. 이때, fetch join을 사용한 쿼리의 경우, 자동으로 생성된 count 쿼리는 데이터를 fetch하는 것이 아니기에 join을 하지 않을 수 있습니다. 이는 관계형 데이터베이스에서 효율적인 count 연산을 위해 최적화한 결과입니다.
Hibernate는 실제로 데이터 로딩 시에는 join을 사용하지만, count 시에는 데이터의 수를 단순히 계산하기 때문에 join을 생략합니다. 이는 left fetch join이나 left join 둘 다 동일하게 적용됩니다. fetch join이 데이터의 양을 변경하지 않으므로, count할 때 fetch join을 하지 않는 이유는 성능 최적화를 위해 불필요한 테이블 결합을 피하는 것입니다.
이런 최적화는 Hibernate의 자동 쿼리 생성 로직의 일부이며, 단순히 조회 대상 엔터티의 개수를 세기 위해 join을 해야 할 필요가 없다고 판단되었기 때문에 발생합니다.
정확한 쿼리 동작을 확인하시려면 Hibernate가 생성하는 SQL 쿼리를 로그로 남겨 확인하시는 것도 도움이 될 것 같습니다.
이미지 URL: 

도움이 되셨길 바라며, 추가 질문이 있으시면 언제든지 말씀해 주세요!
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
77
1
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
109
3
MemberRepository 구현체
0
61
1
pdf 표현 질문드립니다.
0
63
1
로그가 남지 않는 문제.
0
86
1
테스트 라이브러리가 강의는 junit4가 맞나요??
0
73
2
pdf 파일과 차이점이 있는 것같은데 문제 없나요?
0
73
2
@PrePersist, @PreUpdate 호출 시점 질문드립니다.
0
95
2
Sort 인터페이스는 잘 사용 안하나요?
0
52
1
스캔대상 질문드립니다.
0
46
1
하이버네이트6에서의 최적화에 이은 질문
0
88
1
save() vs saveAndFlush DB 통신 횟수
0
55
1
순수 JPA 리포지토리 코드 수정부분
0
87
2
bulk연산 후 flush하는 이유를 모르겠어요
0
152
3
bulk insert 질문입니다.
0
181
2
교만했던 것 같아요.
0
147
1
RESTful 강의는 안하시는 건지 궁금합니다.
0
150
2
동적 테이블에 대한 질문
0
87
1
영속성 전이와 연관관계
0
132
2
강의 10:25 질문
0
75
1
단건 update 질문
0
98
2
엔티티 와 도메인의 경계
0
129
1
UsernameOnlyDto 타입 type mismatch 오류
0
122
1
Projection 개념과 데이터 전달과정에 대해 질문 있습니다.
0
137
1





