logo

JPA exists 쿼리 성능 개선

* 관련 기술 스택이 없습니다
emoji

• Spring Data Jpa에서 복잡한 쿼리를 작성할 때는 `@Query`를 사용하지만, 이는 JPQL에서 `select exists`를 지원하지 않아 `count` 쿼리를 사용해야 한다. 그러나 `count` 쿼리는 성능상 이슈가 있으며, 이는 `exists`가 첫 번째 결과에서 바로 `true`를 리턴하는 반면, `count`는 전체를 확인해야 하기 때문이다.
• 이를 해결하기 위해 Querydsl에서 `exists` 쿼리를 직접 구현할 수 있다. Querydsl에서 기본적으로 지원하는 `exists`는 성능상 이슈가 있는 `count` 쿼리 방식을 사용하므로, `select exists`를 직접 구현하여 사용하면 성능 향상을 기대할 수 있다.
• Querydsl에서는 from절 없이 쿼리를 생성할 수 없기 때문에, exists를 사용할 수 없다. 이를 해결하기 위해 limit 1을 사용하여 1개만 조회하고 이를 통해 데이터가 있는지 없는지 판단하는 방법을 사용할 수 있다.
• JpaRepository의 메소드 쿼리에서는 내부적으로 limit 1을 사용하고 있어서 성능상 이슈가 없다. 따라서 간단한 조건의 exists가 필요한 경우 메소드 쿼리로 구현해도 된다.

thumbnail
북마크
공유하기
신고하기
5분 분량
조회수 167
profile-image향로
2년 전
Copyright © 2025. Codenary All Rights Reserved.