inflearn logo
강의

Course

Instructor

Practical! Spring Data JPA

Spring Data JPA Paging and Sorting

하이버네이트6에서의 최적화에 이은 질문

81

JHL

13 asked

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
left join이 쿼리에 실어지지 않아 의문을 갖던 중

https://inf.run/8ctRk

 

이 질문에 답변해주신걸 보고 이해했습니다.

    @Query(value = "select m from Member m left join m.team")
    Page<Member> findByAge(int age, Pageable pageable);

결론적으로 위와 같이 하면 쿼리에 join문이 붙어 잘 나갑니다.

 

다만 count 쿼리는 여전히 아래와 같은데 이 부분도 역시 마찬가지로 하이버네이트6에서 count 쿼리에서 join 문을 알아서 빼서 최적화해준건가요?

페이징 쿼리

    select
        m1_0.member_id,
        m1_0.age,
        t1_0.team_id,
        t1_0.name,
        m1_0.username 
    from
        member m1_0 
    left join
        team t1_0 
            on t1_0.team_id=m1_0.team_id 
    order by
        m1_0.username desc 
    fetch
        first ? rows only

카운트 쿼리

    select
        count(m1_0.member_id) 
    from
        member m1_0

java spring spring-boot jpa

Answer 1

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.
JHL님께서 질문하신 내용에 대해 답변드리겠습니다.

Jpa에서 페이징 시, 하이버네이트는 count 쿼리를 최적화하여 불필요한 조인을 제거하기 때문에 left join이 자동으로 빠지게 됩니다. 이러한 방식은 쿼리 성능 최적화를 위한 것으로, 특히 수많은 데이터가 있는 경우 조인 없이 카운트만 수행함으로써 성능을 향상시킬 수 있습니다.

하이버네이트 6에서는 이러한 최적화 기능이 기본적으로 제공되어, count 쿼리에 불필요한 조인을 제외하는 것이 자동화되어 있습니다. 따라서 궁금해 하신 것이 맞으며, 성능상의 이점이 있기 때문에 시스템에서 자동으로 이러한 방식을 채택하고 있다는 점을 기억하시면 됩니다.

추가적인 궁금한 점이 있다면 언제든지 질문해 주세요. 감사합니다!

관련 정보를 확인할 수 있는 출처

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

64

1

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

100

3

MemberRepository 구현체

0

55

1

pdf 표현 질문드립니다.

0

59

1

로그가 남지 않는 문제.

0

78

1

테스트 라이브러리가 강의는 junit4가 맞나요??

0

67

2

pdf 파일과 차이점이 있는 것같은데 문제 없나요?

0

68

2

@PrePersist, @PreUpdate 호출 시점 질문드립니다.

0

88

2

Sort 인터페이스는 잘 사용 안하나요?

0

50

1

스캔대상 질문드립니다.

0

45

1

save() vs saveAndFlush DB 통신 횟수

0

50

1

순수 JPA 리포지토리 코드 수정부분

0

85

2

bulk연산 후 flush하는 이유를 모르겠어요

0

147

3

bulk insert 질문입니다.

0

174

2

교만했던 것 같아요.

0

142

1

RESTful 강의는 안하시는 건지 궁금합니다.

0

143

2

동적 테이블에 대한 질문

0

84

1

영속성 전이와 연관관계

0

128

2

강의 10:25 질문

0

71

1

단건 update 질문

0

94

2

엔티티 와 도메인의 경계

0

124

1

UsernameOnlyDto 타입 type mismatch 오류

0

114

1

Projection 개념과 데이터 전달과정에 대해 질문 있습니다.

0

131

1

JUnit4, JUnit5 충돌 문제

0

177

2