25

EXPLAIN: 쿼리 실행 계획 읽기

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) 이해하기

에디터 로딩 중...
  • 시작 비용: 첫 행을 반환하기까지의 비용
  • 총 비용: 모든 행을 반환하기까지의 비용
  • 단위: 임의 단위 (절대값보다 상대 비교용)

비용이 높다 = 오래 걸릴 가능성