피드로 돌아가기
De 6 horas para 40 segundos: como um índice de banco de dados salvou um job crítico de produção
Dev.toDev.to
Database

Covering Index 도입으로 6시간의 Batch Job을 40초로 단축

De 6 horas para 40 segundos: como um índice de banco de dados salvou um job crítico de produção

Fernando Andrade2026년 6월 6일6intermediate

Context

데이터 누적으로 인해 전일 대비 변경 사항을 확인하는 정기 Batch Job의 수행 시간이 급증한 상황. ORDER BY를 포함한 쿼리가 Full Table Scan을 유발하며 실행 시간이 4시간에서 12시간으로 증가하여 서비스 가용성에 영향을 미침.

Technical Solution

  • Azure Application Insights 분석을 통한 쿼리 병목 지점 및 Full Scan 발생 확인
  • fk_process_iddate_created DESC를 조합한 Composite Index 설계로 정렬 및 필터링 비용 제거
  • INCLUDE 절에 id, final_result 등 반환 컬럼을 추가하여 Table Access를 완전히 제거한 Covering Index 구현
  • B-Tree 구조를 활용해 최신 레코드 탐색 시간을 O(N)에서 O(log N)으로 최적화
  • 비즈니스 로직 수정 없이 데이터베이스 물리 계층의 최적화만으로 처리 성능 개선

- 실행 계획(Execution Plan)에서 Full Table Scan 발생 여부 정기 확인 - WHERE, JOIN, ORDER BY 절에 빈번히 사용되는 컬럼 조합으로 Composite Index 검토 - SELECT 대상 컬럼이 적은 경우 INCLUDE 절을 활용한 Covering Index 적용 고려 - 데이터 증가 추이에 따른 쿼리 성능 저하 지표를 모니터링 도구로 추적

원문 읽기