서론

특정 Row의 개수를 세기 위해서는 위의 2가지 방법 정도가 있을 것 같은데

둘중에 무엇이 더 빠른지 궁금해서 직접 테스트 해보게 됐다.


Count 쿼리

fun testCount(): Long =
        jpaQueryFactory
            .select(roadNumberEntity.count())
            .from(roadNumberEntity)
            .where(roadNumberEntity.isRepresent.eq(true))
            .fetchOne()!!

아래는 count 쿼리로 조회했을 때의 성능이다. Row 약 20만개 넣어놓고 테스트 진행

처음에는 약 221ms 정도 소요되고 그후에는 1차캐시에서 가져오기 때문에 120ms 언저리로 나온다.

Count 쿼리 빠른 이유

DB에서 최적화를 해줘서 반환하기 때문


fetch후 size

fun testSize(): Int =
        jpaQueryFactory
            .selectFrom(roadNumberEntity)
            .where(roadNumberEntity.isRepresent.eq(true))
            .fetch()
            .size

아래는 fetch후 size로 조회했을 때의 성능이다. Row 약 20만개 넣어놓고 테스트 진행

데이터가 많으면 많을수록 성능이 현저히 떨어진다.