<aside>
📖
학습 목표
- 성능을 저해하는 전형적인 안티패턴을 실제 예시를 통해 이해한다.
- 인덱스, 조인, 데이터 타입이 성능에 미치는 영향을 실습을 통해 체감한다.
- 인덱스 적용 전후의 성능 차이를 수치로 검증하는 방법을 익힌다.
- PostgreSQL 환경에서 성능 개선을 위한 구체적 튜닝 포인트를 학습한다.
- 실무에서 성능 이슈를 예방하는 습관을 체득한다.
</aside>
1. 성능 관련 검증 실습
1-1. 전형적인 성능 안티패턴
1-1-1. 과도한 인덱스 생성
문제점:
- INSERT / UPDATE / DELETE 시 인덱스 유지 비용 증가
- 조회 쿼리 성능 향상보다 관리 비용이 더 커질 수 있음
CREATE INDEX idx_members_name ON members(name);
CREATE INDEX idx_members_email ON members(email);
CREATE INDEX idx_members_age ON members(age);
CREATE INDEX idx_members_registered_at ON members(registered_at);
➡ 동일 쿼리에서 실제 사용되지 않는 인덱스가 대부분일 때, 오히려 느려질 수 있음
실무 상황 예시:
- 신규 개발자가 성능 향상을 목적으로 모든 칼럼에 인덱스를 남발
- 실제 서비스에서는
name으로 검색하는 경우가 거의 없음
- 그러나 모든 INSERT/UPDATE가 느려짐 (인덱스 유지 비용)
1-1-2. 비효율적인 조인 구조
SELECT *
FROM orders o
LEFT JOIN members m ON o.member_id = m.member_id
LEFT JOIN products p ON o.product_id = p.product_id;
문제점:
- LEFT JOIN 남발, 불필요한 조인
- 조인 순서, 옵티마이저 계획 최적화 안됨
- 데이터가 없는 상황에서도 JOIN으로 인해 Full Scan 발생