PostgreSQL에서 잘 되던 쿼리가 갑자기 5초 이상 걸립니다. EXPLAIN ANALYZE 해보니 Seq Scan이 나옵니다.
EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 1234 AND status = 'completed';
-- 결과: Seq Scan on orders (cost=0.00..15234.00 rows=1 width=128)
-- Execution Time: 5234.123 msuser_id에 인덱스는 걸어놨는데 왜 Seq Scan인가요? 데이터가 100만건 정도 됩니다.
댓글 4
인덱스가 있는데 Seq Scan이 발생하는 대표적인 원인들:
1. 통계 정보가 오래됨 (가장 흔한 원인)2. 복합 인덱스 필요3. 확인 사항100만건이면
ANALYZE후 복합 인덱스를 생성하면 5초 → 1ms 이내로 줄어들 겁니다.autovacuum이 ANALYZE도 함께 수행하지만, 데이터 변경이 많으면 통계가 뒤처질 수 있습니다. 특히 대량 INSERT/UPDATE 직후에 그렇습니다.
대량 배치 작업 후에는 수동
ANALYZE를 습관화하는 것이 좋습니다.