기본 패턴
text
EXPLAIN ANALYZE
SELECT *
FROM posts
WHERE user_id = 10;설명
EXPLAIN은 PostgreSQL이 쿼리를 어떤 계획으로 실행할지 보여 주고,ANALYZE를 붙이면 실제 실행까지 해 본 결과가 함께 나옵니다.- 여기서 자주 보는 단어는
Seq Scan,Index Scan,Nested Loop,Hash Join같은 실행 노드 이름입니다. cost는 추정 비용이고,actual time과rows는 실제 실행 결과입니다.- 성능 문제를 볼 때는 "인덱스를 안 썼다"보다 먼저 "왜 그렇게 판단했는가"를 읽는 습관이 중요합니다.
- 즉 EXPLAIN ANALYZE는 단순 측정 도구가 아니라, 옵티마이저가 어떤 길을 선택했는지 이해하는 첫 출발점입니다.
짧은 예제
text
EXPLAIN ANALYZE
SELECT p.title, u.name
FROM posts AS p
JOIN users AS u ON u.id = p.user_id
WHERE p.created_at >= CURRENT_DATE - INTERVAL '7 days';빠른 정리
| 항목 | 읽는 포인트 |
|---|---|
Seq Scan | 테이블 전체를 순차 탐색 |
Index Scan | 인덱스를 사용한 탐색 |
cost | 계획 단계의 추정 비용 |
actual time | 실제 실행 시간 |
주의할 점
EXPLAIN ANALYZE는 실제 쿼리를 실행합니다. 조회는 괜찮지만, 데이터 변경문에 붙일 때는
정말 실행된다는 점을 잊지 말아야 합니다.
참고 링크
1 sources