Joshua게시판(SSR)-12-findAll() N + 1문제

jaegeunsong97·2023년 8월 14일
0

SSR 기반 JoshuaBlog

목록 보기
12/23

깃허브링크

노션링크

  • findAll 테스트

-> board select 1번

-> board select 1번 + user(song) select 1번+ user(park) select 1번 (3번)
원래는 user 20번 select 해야하지만 song, park 캐싱해서 가져옴

-> 만약 EAGER로 바꾸면, board select 1번 + user select 1번 (2번)

N + 1 정리

board 1000개, 1000개 전부 각기 다른 user가 작성
Board의 user는 LAZY 상태
findAll()
1. board 1 ~ board 1000 SELECT 한번에 (1번) -> 영속성 컨텍스트에 존재
2. 각 board에 딸린 user 전부 LAZY로딩 (1000번)
3. N + 1 문제 발생(PageRequest가 이런 상태가 된다.)

해결방법
1. join fetch -> board(1000) + user(1000) select (1번)
2. in-query -> user 만 가져와서(distinct 사용) -> board 사용 (select 2번)

PageRequest 안한 이유?

쿼리가 N + 1 문제가 발생함....

profile
현재 블로그 : https://jasonsong97.tistory.com/

0개의 댓글