25분
EXPLAIN: 쿼리 실행 계획 읽기
Day 4: 쿼리가 왜 이렇게 느려?
EXPLAIN: 쿼리 실행 계획 읽기
SQL 고급 - 윈도우 함수와 성능 최적화 > Day 4: 쿼리가 왜 이렇게 느려?
학습 목표
EXPLAIN의 출력을 이해한다 주요 노드 타입을 파악한다
EXPLAIN이란?
쿼리가 어떻게 실행될지 계획을 보여준다.
실제로 실행하지 않고, DB가 "이렇게 할 거야"라고 알려줌.
기본 사용
에디터 로딩 중...
결과:
에디터 로딩 중...
출력 해석
에디터 로딩 중...
| 항목 | 의미 |
|---|---|
| 노드 타입 | 데이터 접근 방식 (Seq Scan, Index Scan 등) |
| cost | 상대적 비용 (숫자가 낮을수록 좋음) |
| rows | 예상 결과 행 수 |
| width | 각 행의 평균 바이트 크기 |
EXPLAIN vs EXPLAIN ANALYZE
EXPLAIN (예측만)
에디터 로딩 중...
- 실행 안 함, 계획만 보여줌
- 빠름, 안전
EXPLAIN ANALYZE (실제 실행)
에디터 로딩 중...
출력:
에디터 로딩 중...
- actual time: 실제 소요 시간 (ms)
- rows: 실제 반환 행 수
- loops: 실행 횟수
- Rows Removed: 필터로 제거된 행 수
주요 노드 타입
1. Seq Scan (순차 스캔)
에디터 로딩 중...
전체 테이블을 처음부터 끝까지 읽는다.
- 인덱스가 없거나, 대부분의 행을 읽어야 할 때
- 대용량 테이블에서는 느림
2. Index Scan (인덱스 스캔)
에디터 로딩 중...
인덱스를 통해 필요한 행만 찾는다.
- 특정 조건에 맞는 소수의 행만 필요할 때
- 인덱스가 있어야 가능
3. Index Only Scan (인덱스만 스캔)
에디터 로딩 중...
테이블에 접근하지 않고 인덱스만으로 결과 반환.
- SELECT 컬럼이 모두 인덱스에 포함될 때
- 가장 빠른 방식
4. Bitmap Index Scan
에디터 로딩 중...
여러 인덱스 조건을 결합할 때 사용.
- 인덱스로 위치 찾고 → 테이블에서 데이터 읽기
비용(cost) 이해하기
에디터 로딩 중...
- 시작 비용: 첫 행을 반환하기까지의 비용
- 총 비용: 모든 행을 반환하기까지의 비용
- 단위: 임의 단위 (절대값보다 상대 비교용)
비용이 높다 = 오래 걸릴 가능성