BatchSize 관련 질문 드립니다.
517
작성한 질문수 32
우선 정말 좋은 강의 해주셔서 감사합니다.
batch size 관련해서 이해 안되는것이 있어서 질문드립니다.
우선 batch size가 일대다 관계에서 조인 문제의 N+1을 해결해준다는 것은 이해가 가는데.
batch size를 100으로 설정했을시 쿼리에 team_id 당 member들을 100개씩 날려서 패치 조인처럼 하는 방식인가요??
정확하게 이해가 안되서 질문드립니다.
답변 1
8
안녕하세요. hangs0908님
batch size는 일대다 관계도 해결하고, 다대일 관계 등등 수 많은 N+1 문제를 해결해줍니다.
예를 들어서
member -> team 관계가 지연로딩 관계입니다.
member를 10개 조회했으면, N+1이 최악의 경우 N이 10번 발생하겠지요.
첫 쿼리 select m from Member m -> member 엔티티 10개 조회
while 루프 10개 실행
m.getTeam().getName()
이렇게 하면 지연로딩으로 select * from team where id = 1...10 쿼리가 총 10번 실행됩니다.
그런데 batchSize를 10으로 지정해두면 다음과 같이 동작합니다.
첫 쿼리 select m from Member m -> member 엔티티 10개 조회
while 루프 10개 실행
m.getTeam().getName()
지연 로딩시 실행 쿼리
루프 1
select * from team where member_id in (1,2,3,4,5)
루프 6
select * from team where member_id in (6,7,8,9,10)
이렇게 batchSize를 5로 변경하면 in 쿼리로 바뀌면서 루프시 총 10번 실행되는 쿼리가 2번만 실행됩니다.
직접 테스트 해보시면 더 많이 이해가 되실꺼에요^^
추가로 더 깊은 내용은 https://www.inflearn.com/questions/34469 를 참고하시면 도움이 됩니다.
감사합니다.
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
54
2
inheritance startegy 선택시 고려사항
0
36
1
Entity 동등성 비교
0
38
1
실무 조언 관련 질문입니다.
0
64
1
H2데이터베이스 파일 생성
0
76
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
66
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
62
1
JPQL 메소드와 락
0
62
1
Delivery @OneToOne
0
70
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
104
2
UnsupportedOperationException 발생
0
97
3
H2 Database 연결이 안됩니다.
0
101
2
연관관계 매핑 질문드립니다.
0
93
2
h2데이터베이스 실행오류
0
114
2
persistence.xml
0
119
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
87
1
영속성 컨텍스트
0
74
1
JPA 프록시
0
105
1
Native Query와 MyBatis
0
81
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
97
1
임베디드 타입 예시 코드 관련 질문
0
125
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
100
3
인텔리제이 패키지 커서 단축키 질문
0
112
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
151
1





