ManyToOne 에서 fetch join 에 대해 질문 있습니다.
107
작성한 질문수 92
강의 1분쯤에 아래와 같은 내용이 있습니다.
"ManyToOne이나 OneToOne 같은건 fetch join을 하거나 DB 입장에서는 left out join해서 한번에 데이터를 다 끌고와도 성능에 무리가 없는데 컬렉션 조회 같은 경우에는 조회를 하는 순간 DB 입장에서는 데이터가 뻥튀기 된다."
궁금한 부분은 ManyToOne 관계에서 fetch join에서도 DB 입장에서 데이터가 뻥튀기 되지 않나 라는 생각입니다.
예를들어 member1, member2, member3이 teamA에 속해 있다고 했을때 이 상황에서 fetch join을 해도 어차피 내부적으로는 join으로 바뀌게 되므로 결과적으로는 아래와 같이 출력이 되므로 DB 입장에서 결국 이 상황도 데이터 뻥튀기 이지 않나 라는 생각이 듭니다.
member1 : teamA
member2 : teamA
member3 : teamA
답변 1
0
안녕하세요. 감바스님, 공식 서포터즈 y2gcoder입니다.
정확히는 DB 입장 + 조회 대상 (from절) 의 입장에서 봐주시면 감사하겠습니다 🙂
예를 들어
select * from members join teams on members.team_id = teams.id;라면 members 입장에서는 member가 3개니 위에서 말씀해주셨던 것 과 같이
member1(teamA)
member2(teamA)
member3(teamA)
가 나오는 것이 맞습니다!
그러나
select * from teams join members on teams.id = members.team_id를 할 때는 쿼리 결과가
teamA(member1)
teamA(member2)
teamA(member3)
입니다. 보통 teams을 기준으로 team이 하나가 있다면 로우 수가 1개가 나오는게 자연스럽습니다. 그러나 지금은 join 으로 인해 같은 teamA에 대한 로우 수가 3개입니다.
이런 점에서 데이터가 뻥튀기되었다고 표현하는 것입니다 🙂
감사합니다.
강의 관련 외 질문입니다.
0
81
2
SpringBoot4 + Hibernate7 모듈 등록 방법 공유
1
100
1
BeanCreationException
0
96
3
Update 후 UpdateMemberResponse 매핑할 때
0
57
1
트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?
0
102
2
페이징 + 검색조건 관련해서 질문드립니다.
0
74
1
Query Dsl Q파일 질문입니다.
0
86
1
루트 쿼리라는것은
0
62
1
메서드를 분리하는 기준
0
71
1
findAllWithMemberDelivery 메서드 질문드립니다.
0
116
3
연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략
0
92
2
fetch join과 영속화와 OSIV의 관계
0
90
2
Distinct 사용 전 결과에 대한 의문
0
118
2
레포지토리 계층에서의 트랜잭션에 대한 의문
0
63
1
영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.
0
79
2
dto 필드 속 엔티티 여부
0
63
1
뷰템플릿 사용 시
0
82
2
Result 클래스 관련 질문
0
56
1
@PostConstruct 프록시 관련 질문드립니다
0
88
1
DTO 대신 Form 사용은 안되나요?
0
140
1
OSIV ON 상태일 때
0
99
1
fetch join VS fetch join 페이징 궁금증
0
190
2
양방향 연관관계 알아보는 법?
0
110
1
16강 17강 간단 정리 이게 맞을까요 ?
0
168
2





