피드로 돌아가기
SQL Performance: Indexing, Query Tuning & Explain Plans (Developer Guide)
Dev.toDev.to
Database

Index 최적화와 Query Tuning을 통한 5s Table Scan의 5ms 단축

SQL Performance: Indexing, Query Tuning & Explain Plans (Developer Guide)

Anup Karanjkar2026년 5월 21일10intermediate

Context

Foreign Key Index 누락 및 ORM의 N+1 쿼리 발생으로 인한 API 성능 저하 상황 분석. PostgreSQL의 Cost-based Optimizer가 Stale Statistics로 인해 비효율적인 Seq Scan을 선택하는 구조적 한계 직면.

Technical Solution

  • EXPLAIN (ANALYZE, BUFFERS)를 통한 Actual Row와 Estimated Row의 편차 분석으로 Statistics 업데이트 필요성 도출
  • Partial Index 도입을 통해 특정 상태(status='pending') 데이터만 인덱싱하여 인덱스 크기 감소 및 유지보수 비용 절감
  • Leading Column Rule을 적용한 Composite Index 설계로 다중 조건 필터링 시 Index Scan 효율 극대화
  • Covering Index(INCLUDE 절) 구현을 통해 Heap Fetch 없이 Index 영역에서만 데이터를 반환하는 Index Only Scan 달성
  • Application 레벨의 N+1 쿼리를 SQL JOIN 및 Aggregate JOIN 구조로 통합하여 Network Round-trip 횟수 최소화
  • REINDEX CONCURRENTLY를 통한 Table Lock 없는 인덱스 재구축으로 서비스 가용성 확보

1. 느린 쿼리 분석 전 ANALYZE를 통해 통계 정보 최신화 여부 확인

2. EXPLAIN ANALYZE의 Buffers 지표를 통해 Disk I/O(read) 발생 지점 파악

3. 필터링 조건의 Selectivity가 낮을 경우 Index Scan보다 Seq Scan이 유리함을 인지

4. Composite Index 설계 시 WHERE 절의 컬럼 순서와 Leading Column 일치 여부 검토

5. ORM 사용 시 Fetch 전략을 확인하여 JOIN 기반의 단일 쿼리로 전환

원문 읽기