• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

JPA가 생성해주는 페이징 쿼리 질문 (fetch)

24.04.30 19:53 작성 조회수 48

0

안녕하세요,

 

스프링부트3.x 와 H2(메모리 모드) 를 사용하고 있습니다.

페이징 쿼리가 limit offset 이 아니라 offset fetch 쿼리가 나갑니다.

@Test
public void paging1() {
    List<Member> result = queryFactory
            .selectFrom(member)
            .orderBy(member.username.desc())
            .offset(1) //0부터 시작(zero index)
            .limit(2) //최대 2건 조회
            .fetch();
    assertThat(result.size()).isEqualTo(2);
}

스프링부트2.x 로 테스트를 해보니 limit offset 으로 나가는데 혹시 버전이 올라가면서 최적화를 해주는걸까요?

그렇다면 fetch 가 더 성능이 좋다는 이야기가 되는걸까요?

 

항상 감사합니다!

답변 1

답변을 작성해보세요.

0

OMG님의 프로필

OMG

2024.04.30

안녕하세요. lch9502님, 공식 서포터즈 OMG입니다.

영한님의 스프링데이터 JPA강의에 올리온 질문이긴 하나, 하이버네이트 버전은 동일하게 버전업 되었기에 동일한 상황일 것으로 예상합니다 😀 출력쿼리도 offset fetch first rows only로 동일하네요!

영한님 답변을 참고해주세요 ^^

https://www.inflearn.com/questions/886858/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%8D%B0%EC%9D%B4%ED%84%B0-jpa-%ED%8E%98%EC%9D%B4%EC%A7%95%EA%B3%BC-%EC%A0%95%EB%A0%AC-left-join-%EC%BF%BC%EB%A6%AC

감사합니다.