PostgreSQL에서 쿼리가 느려지기 시작해서 인덱스를 걸려고 합니다. 테이블 구조는 이렇습니다:
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
user_id INT NOT NULL,
product_id INT NOT NULL,
status VARCHAR(20), -- pending, paid, shipped, delivered
amount DECIMAL(10,2),
created_at TIMESTAMP DEFAULT NOW()
);
-- 약 50만 건의 데이터
주로 사용하는 쿼리:
SELECT * FROM orders WHERE user_id = ? ORDER BY created_at DESC;
SELECT * FROM orders WHERE status = 'pending' AND created_at > NOW() - INTERVAL '7 days';
SELECT user_id, SUM(amount) FROM orders GROUP BY user_id;
어떤 컬럼에 인덱스를 걸어야 하고, 복합 인덱스는 언제 쓰는 건가요?
댓글 4
쿼리 패턴을 보고 인덱스를 설계해볼게요.
인덱스 설계 원칙:
적용 후
EXPLAIN ANALYZE로 실제 효과를 확인해보세요!감사합니다! EXPLAIN ANALYZE 해봤는데 쿼리 1이 Seq Scan에서 Index Scan으로 바뀌면서 200ms → 3ms로 줄었습니다. 그런데 인덱스를 너무 많이 걸면 INSERT/UPDATE가 느려진다고 하던데 몇 개까지 괜찮은 건가요?
200ms → 3ms면 극적인 개선이네요! 인덱스 수에 정해진 제한은 없지만 경험적으로:
idx_scan이 0인 인덱스는 제거를 고려해보세요.미사용 인덱스 확인 쿼리까지! 정말 실용적인 답변 감사합니다. 덕분에 DB 최적화 방향이 잡혔습니다 👍