피드로 돌아가기
Why PostgreSQL Ignores Your Index (Sometimes), Entry #2
Dev.toDev.to
Database

PostgreSQL Cost-based Optimizer의 Index Scan 및 Seq Scan 선택 메커니즘 분석

Why PostgreSQL Ignores Your Index (Sometimes), Entry #2

Ella2026년 4월 11일3intermediate

Context

Index 생성 후에도 쿼리 성능이 개선되지 않는 현상 발생. PostgreSQL이 단순히 Index 존재 여부가 아닌 최소 비용(Cheapest Way)을 기준으로 실행 계획을 결정하는 Cost-based Optimizer 구조에 따른 한계점 분석.

Technical Solution

  • EXPLAIN ANALYZE를 통한 실제 실행 계획의 Actual Time 및 Index Cond 검증
  • 데이터 선택도(Selectivity)에 따른 Random I/O 비용과 Sequential Scan 비용의 대조 분석
  • 소량의 데이터 추출 시 Index Scan을 통한 직접 접근 방식 채택
  • 대량의 데이터(예: 전체의 80% 이상) 추출 시 Index Jump 비용을 회피하기 위한 Sequential Scan 전환
  • Random I/O 발생 빈도와 Table Page 접근 횟수를 기반으로 한 총 작업량(Total Work) 최적화 설계
  • 데이터 규모 및 필터 조건의 변동성에 따른 실행 계획의 동적 변경 원리 적용

1. Index 생성 후 EXPLAIN ANALYZE로 실제 Index Scan 수행 여부 확인

2. WHERE 절의 필터 조건이 충분한 Selectivity를 확보했는지 검토

3. 테이블 규모가 매우 작아 Sequential Scan이 더 효율적인 상황인지 판단

4. Random I/O 비용이 Sequential Scan의 전체 읽기 비용을 초과하는지 분석

원문 읽기