실행 계획이란 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 | 양쪽을 정렬 후 병합 | 정렬 비용 발생, 정렬된 상태면 효율적 |
실행 계획 분석 절차
- 최상단 연산부터 확인 → 최종 결과를 만드는 작업 확인
- 들여쓰기 깊이 파악 → 깊은 단계부터 실행
- Rows와 Cost 비교 → 예상 처리량과 비용이 높은 부분이 병목 구간
- Access Predicate vs Filter Predicate 구분
-. Access Predicate: 인덱스 접근 조건
-. Filter Predicate: 접근 후 필터링 조건 (비효율 가능성) - 조인 순서와 방식 확인 → 데이터 양에 맞는 방식인지 판단
실무 팁
- 실행 계획은 예상 계획이므로, 실제 실행 시간과 비교 필요 (EXPLAIN ANALYZE 활용)
- 통계 정보 최신화는 필수, 오래된 통계는 잘못된 계획을 유도
- 실행 계획 캡처 시 SQL 원문, 실행 환경, 통계 수집 시점을 함께 기록하면 재현 가능성↑
- 동일 SQL이라도 바인드 변수 값에 따라 계획이 달라질 수 있음
'프로그래밍' 카테고리의 다른 글
서브쿼리와 뷰(View) 최적화 (1) | 2025.08.11 |
---|---|
옵티마이저(Optimizer)의 이해 (2) | 2025.08.10 |
SQL 튜닝 심화: 조인 튜닝 전략 완전 정복 (2) | 2025.08.08 |
SQL 튜닝 심화: 실행 계획(Execution Plan) 완전 정복 (1) | 2025.08.08 |
SQL 튜닝 개요 및 전략|실무에서 바로 쓰는 성능 향상 기법 (3) | 2025.08.07 |