본문 바로가기
Spring/스프링 기본 원리

[JPA] 특정 Table의 원소 개수 가져오기

by Taler 2022. 10. 17.

crudRepository를 확장하는 repository (JpaRepository, MongoRepository 등)을 사용하고 있으며, 해당 repository가 매핑하는 table에 포함된 record 개수를 가져오고 싶을 때는 `count()` 메소드를 사용하면 된다.

 

...

long userCount = userRepository.count();

...

 

해당 인터페이스를 통해 나가는 쿼리는 통상적으로 record 개수를 찾을 때 이용하는 select count(*) 쿼리가 나가며, 실행 시간에는 거의 영향을 주지 않는 수준이다. 

 

실제로 날아가는 쿼리와 실행 시간, record 개수

 

10만개의 Entity에 대해서 평균적으로 94ms 정도의 시간이 걸린다. 여기서도 신기했던 게, 동시에 날아간 4개의 쿼리는 94ms의 시간이 걸렸지만, 뒤늦게 혼자 실행된 쿼리는 같은 개수, 유사한 복잡도의 컬럼임에도 불구하고 혼자 9ms의 시간이 걸렸다. 정말 미세한 시간 차이이지만 분명한 건 10배 이상의 시간 차이가 났다는 점이다!

 

추론해보건데 여러 개의 Connection에서 오는 쿼리를 한 번에 처리하다보니 특정 부분에 병목이 발생했을 것이고, 만약 그렇다면 해당 부분을 찾아서 개선할 수 있다면 훨씬 더 빠르게 (아마 10배 이상) 프로그램을 제작할 수 있을 것이다.

 

나중에 한 번 조사해봐야겠다.

댓글