인프런 커뮤니티 질문&답변

asdkfur님의 프로필 이미지

작성한 질문수

실전! 스프링 데이터 JPA

스프링 데이터 JPA 페이징과 정렬

@Query 에 countquery를 설정했음에도 안나간는 경우?

20.04.22 23:55 작성

·

604

4

안녕하세요 정말 좋은강의 잘듣고 있습니다.

혹시 countquery옵션을 설정했음에도 안나가는 경우가 있을까요?

이전 jpa 활용2 에서 order 객체를 기반으로 springdata jpa repository 를 만든후 아래와 같은 메서들를 정의했는데

@Query(value = "select o from Order o join fetch o.member m join fetch o.delivery d",countQuery = "select count(o) from Order o")
public Page<Order> findAllWithMemberDelivery(Pageable pageable);

결과값은 count 문없이 아래와 같은 쿼리만 나가네요 

 select

        order0_.order_id as order_id1_6_0_,

        member1_.member_id as member_i1_4_1_,

        delivery2_.delivery_id as delivery1_2_2_,

        order0_.delivery_id as delivery4_6_0_,

        order0_.member_id as member_i5_6_0_,

        order0_.order_date as order_da2_6_0_,

        order0_.status as status3_6_0_,

        member1_.city as city2_4_1_,

        member1_.street as street3_4_1_,

        member1_.zipcode as zipcode4_4_1_,

        member1_.name as name5_4_1_,

        delivery2_.city as city2_2_2_,

        delivery2_.street as street3_2_2_,

        delivery2_.zipcode as zipcode4_2_2_,

        delivery2_.status as status5_2_2_ 

    from

        orders order0_ 

    inner join

        member member1_ 

            on order0_.member_id=member1_.member_id 

    inner join

        delivery delivery2_ 

            on order0_.delivery_id=delivery2_.delivery_id limit ?

혹시 inner join 이라 따로 다시 조회할 이유가 없어서 스프링에서 최적화해서 따로 쿼리가 나가지 않은건가요?

 

답변 2

8

김영한님의 프로필 이미지
김영한
지식공유자

2020. 04. 24. 01:27

반갑습니다. asdkfur님^^

네 맞습니다. 내부에서 최적화를 합니다. 그래서 count 쿼리가 필요하지 않으면 호출하지 않습니다^^!

예를 들어서 페이지를 10건 단위로 하는데, 처음에 2건만 조회되면 사실 count가 2로 정해졌기 때문에 count쿼리를 호출할 필요가 없는 것이지요.

이런식으로 최대한 최적화를 시도합니다^^

최적화 로직은 다음 클래스를 참고하시면 됩니다.

org.springframework.data.repository.support.PageableExecutionUtils

감사합니다.

청포도봉봉이님의 프로필 이미지

2023. 03. 16. 22:28

감사합니다 어쩐지 쿼리가 안나가더군요.. ㅎㅎ

2

asdkfur님의 프로필 이미지
asdkfur
질문자

2020. 04. 26. 16:26

항상  감사합니다 ㅎㅎ .

asdkfur님의 프로필 이미지

작성한 질문수

질문하기