우리는 querydsl을 통해 exists를 구현하고는 한다
이 exists를 구현할 때 우리는 어떻게 구현하는 것이 좋을지 알아보려고 한다.
public Boolean findByMember(Entity entity) {
return queryFactory.selectFrom(entity)
.where(entity.eq(entity))
.fetchCount()>0;
}
위와 같이 count를 한 후 그 결과가 1보다 큰지 확인하는 방법이 있다.
그러나 이 방법은 결국 모두 조회한 후 0보다 큰지 확인하기 때문에 성능적으로 비효율적이다.
일반 query의 exists는 분명 효율적이다
그러나 querydsl의 exists는 이상하게도 fetchCount를 사용하는 위의 방법과 같이 구현되어있다.
그럼 우리는 대체 어떻게 구현해야할까?
public Boolean findByMember(Entity entity) {
return queryFactory.selectFrom(entity)
.where(entity.eq(entity))
.fetchFirst()!=null;
}
과 같이 구현하면 조회를 하며 하나라도 조건에 맞는 칼럼을 발견하면
즉시 탐색을 종료하므로 최악의 경우에는 fetchCount()를 사용한 것과 같은 성능을 보여줄 수도 있으나 전체적으로 보았을 때에는 분명 더 좋은 성능을 보여줄 수 있을 것이다.