오봉이와 함께하는 개발 블로그

Querydsl - 스프링 데이터 페이징 활용 2 (CountQuery 최적화) 본문

BE/JPA

Querydsl - 스프링 데이터 페이징 활용 2 (CountQuery 최적화)

오봉봉이 2022. 9. 20. 03:02
728x90

스프링 데이터 페이징 활용1 - CountQuery 최적화

  • 스프링 데이터 라이브러리가 제공
  • count 쿼리가 생략 가능한 경우 생략해서 처리
    • 페이지 시작이면서 컨텐츠 사이즈가 페이지 사이즈보다 작을 때
    • 마지막 페이지 일 때 (offset + 컨텐츠 사이즈를 더해서 전체 사이즈 구함)

PageableExecutionUtils.getPage()로 최적화

JPAQuery<Member> countQuery = queryFactory
        .select(member)
        .from(member)
        .leftJoin(member.team, team)
        .where(
                usernameEq(condition.getUsername()),
                teamNameEq(condition.getTeamName()),
                ageGoe(condition.getAgeGoe()),
                ageLoe(condition.getAgeLoe())
        );

// countQuery.fetchCount(); // 이 코드를 실행해야 쿼리가 날라간다

return PageableExecutionUtils.getPage(content, pageable, () -> countQuery.fetchCount());
return PageableExecutionUtils.getPage(content, pageable, countQuery::fetchCount); // lambda식

반환 값을 위 코드로 작성하면 글 최상단에 적힌 조건일 때는 count 쿼리를 생략할 수 있기 때문에 성능 최적화가 된다.

인프런 김영한 지식공유자님 강의 : 실전! Querydsl
728x90
Comments