본문 바로가기
프로그래밍

실행 계획(Execution Plan) 분석

by 유형제맘 2025. 8. 10.

실행 계획이란 SQL 문을 실행할 때 데이터베이스가 어떤 경로로 데이터를 읽고 처리할지를 단계별로 나타낸 설계도입니다. SQL 튜닝에서는 실행 계획을 읽는 능력이 성능 개선의 출발점입니다.

실행 계획의 확인 방법

DBMS마다 실행 계획을 확인하는 명령어와 툴이 다릅니다.

1. Oracle

  • EXPLAIN PLAN FOR ... + SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY)
  • SET AUTOTRACE ON (SQL*Plus)
  • SQL Developer의 "Execution Plan" 탭

2. MySQL

  • EXPLAIN SELECT ...;
  • EXPLAIN FORMAT=JSON SELECT ...;

3. PostgreSQL

  • EXPLAIN SELECT ...;
  • EXPLAIN (ANALYZE, BUFFERS) SELECT ...;

실행 계획의 기본 구조

실행 계획은 위에서 아래로 또는 들여쓰기 구조로 표현되며, 각 단계가 하나의 연산(Operation)을 나타냅니다.

주요 컬럼 의미
Operation / Step 어떤 작업을 수행하는지 (예: TABLE ACCESS, INDEX SCAN, JOIN)
Object Name 사용되는 테이블/인덱스 명
Rows 예상 처리 행 수
Cost 옵티마이저가 계산한 상대적 비용
Access Predicates 데이터 접근 조건
Filter Predicates 데이터 필터링 조건

실행 계획에서 자주 등장하는 연산

연산 설명 특징
TABLE ACCESS FULL 전체 테이블 스캔 작은 테이블이거나 인덱스 미사용 시
INDEX RANGE SCAN 인덱스 범위 검색 범위 조건("BETWEEN", ">", "<")
INDEX UNIQUE SCAN 인덱스 키 하나만 검색 "=" 조건, PK/UK 조회
NESTED LOOPS 두 테이블 조인을 반복 탐색 소량 데이터 조인
HASH JOIN 해시 테이블 생성 후 조인 대량 데이터 조인
MERGE JOIN 양쪽을 정렬 후 병합 정렬 비용 발생, 정렬된 상태면 효율적

실행 계획 분석 절차

  1. 최상단 연산부터 확인 → 최종 결과를 만드는 작업 확인
  2. 들여쓰기 깊이 파악 → 깊은 단계부터 실행
  3. Rows와 Cost 비교 → 예상 처리량과 비용이 높은 부분이 병목 구간
  4. Access Predicate vs Filter Predicate 구분
    -. Access Predicate: 인덱스 접근 조건
    -. Filter Predicate: 접근 후 필터링 조건 (비효율 가능성)
  5. 조인 순서와 방식 확인 → 데이터 양에 맞는 방식인지 판단

실무 팁

  • 실행 계획은 예상 계획이므로, 실제 실행 시간과 비교 필요 (EXPLAIN ANALYZE 활용)
  • 통계 정보 최신화는 필수, 오래된 통계는 잘못된 계획을 유도
  • 실행 계획 캡처 시 SQL 원문, 실행 환경, 통계 수집 시점을 함께 기록하면 재현 가능성↑
  • 동일 SQL이라도 바인드 변수 값에 따라 계획이 달라질 수 있음