모든 인덱스의 비용
각 인덱스가 INSERT, UPDATE (인덱스 컬럼), DELETE 더 비싸게 만듦. 각 인덱스가 디스크 공간 + 캐시 경쟁. 각 인덱스가 VACUUM 유지보수 필요. 인덱스가 write throughput 도 제약. 측정 없이 '빠르게' 인덱스 추가 = read 쿼리 의미있게 안 빠르게 하면서 write 5× 느리게 만드는 좋은 방법.
세 룰의 전략
- 측정한 쿼리에 인덱스 추가 — 상상한 쿼리 아님. EXPLAIN ANALYZE 가 진실.
- FK 항상 인덱스 — 부모 행 삭제 일어나는 테이블에 예외 없음.
- 주기적으로 미사용 인덱스 정리 —
pg_stat_user_indexes.idx_scan = 0이 몇 달 = 인덱스 짐만 됨.
미사용 인덱스 감사
PostgreSQL 이 각 인덱스 사용 빈도 추적. 앱이 잠시 프로덕션 있은 후 이 catalog 쿼리가 아무도 안 쓰는 인덱스 드러냄. Sanity check 후 drop.