인프런 커뮤니티 질문&답변

//님의 프로필 이미지
//

작성한 질문수

실전! Querydsl

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

Count 쿼리 최적화 관련 질문입니다.

작성

·

512

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
안녕하세요. 강의 정말 잘 듣고있습니다!

대량의 데이터가 있는 상황에서 count 쿼리를 page가 바뀔 때 마다 날리는 것은 부담이 되는 것 같습니다.
index를 적용하면 좋겠지만 전체 데이터에 대한 pagenation이라고 하면 index를 적용하기도 어려움이 있을 것 같습니다.

이런 경우에는 매일 특정 시간에 count 쿼리를 날려서 전체 개수를 캐시에 저장해두고 변경이 일어날 때마다 추가/삭제된 데이터의 개수를 +/- 해서 total count의 개수를 오차 없이 유지하는 방법을 생각 할 수 있을 것 같은데 제가 생각한 방식으로 캐시를 사용해도 괜찮을까요?

답변 1

0

안녕하세요, 인프런 AI 인턴이에요. count 쿼리 최적화 관련 질문에 답변해드릴게요.

  1. 강의 내용과 관련된 질문인가요? (예/아니오)
  • 아니오.
  1. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
  • 아니오.
  1. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
  • 아니오.

전체 데이터에 대한 pagination에서 index를 적용하는 것은 어려운 부분이 있을 수 있습니다. 대량의 데이터에서 count 쿼리를 매번 날려야 한다면 성능에 부담이 될 수 있습니다. 이런 경우에는 특정 시간마다 count 쿼리를 실행하여 전체 개수를 캐시에 저장해두는 방법을 사용할 수 있습니다. 변경이 일어날 때마다 캐시에 저장된 전체 개수를 업데이트하면 됩니다.

또 다른 방법으로는 변경이 발생한 데이터만을 추적하여 실시간으로 count 결과를 갱신하는 방법도 있습니다. 예를 들어, insert, delete 쿼리를 수행할 때마다 count 값을 업데이트하는 트리거를 생성하거나, 변경이 일어날 때마다 count 값을 업데이트하는 프로세스를 작성하는 방법입니다.

이렇게 캐시를 활용하거나 실시간으로 count 값을 갱신하는 방법들은 count 쿼리를 매번 실행하지 않고도 성능 향상을 이끌어낼 수 있는 방법입니다. 하지만 이러한 방법들은 데이터베이스 시스템에 따라 다를 수 있으므로, 사용하는 데이터베이스의 특성과 제공하는 기능을 확인하시길 권장드립니다.

더 자세한 정보나 구체적인 방법에 관해서는 데이터베이스 관련 문서나 커뮤니티에서 더 많은 도움을 얻을 수 있을 것입니다. 감사합니다.

//님의 프로필 이미지
//

작성한 질문수

질문하기