SQL
SQL 옵티마이저와 실행 계획(Execution Plan)
recordari
2025. 5. 16. 18:41
SQL이란?
SQL은 Structured Query Language의 줄임말로, 구조적 질의 언어를 의미한다.
SQL은 구조적, 집합적, 선언적인 특징을 갖고 있다. 원하는 결과집합을 구조적, 집합적으로 선언하지만, 그 결과집합을 만드는 과정은 절차적일 수 밖에 없다.
즉, 프로시저가 필요한데, 그런 프로시저를 만들어 내는 DBMS 내부 엔진이 바로 SQL 옵티마이저이다. 옵티마이저는 우리가 작성한 SQL을 가장 효율적으로 실행할 수 있는 계획을 세우고, 내부적으로 일련의 절차를 거쳐 이를 실행 가능한 코드로 만든다.
이 일련의 과정을 통틀어 SQL 최적화라고 부른다.
SQL 실행 전 최적화 과정
SQL이 실제 실행되기 전에는 다음과 같은 절차를 거칩니다:
1. SQL 파싱 (Parsing)
- 파싱 트리 생성: SQL 문을 구조적으로 해석하여 트리 형태로 만든다.
- Syntax 체크: 문법적으로 오류가 없는지 검사한다.
- Semantic 체크: 의미상 논리적 오류가 없는지 확인합니다 (예: 존재하지 않는 컬럼 참조 등).
2. SQL 최적화 (Optimization)
- SQL 옵티마이저는 미리 수집된 통계 정보와 시스템 정보를 바탕으로 다양한 실행 경로(Execution Path)를 생성한다.
- 이 중에서 가장 효율적인 실행 경로를 선택한다.
- 이 단계는 마치 여러 가지 경로 중 가장 빠른 길을 고르는 내비게이션과 비슷한다.
3. 로우 소스 코드 생성 (Code Generation)
- 옵티마이저가 선택한 실행 계획을 실제 실행 가능한 내부 코드 혹은 프로시저 형태로 변환한다.
SQL 옵티마이저란?
- *SQL 옵티마이저(SQL Optimizer)**는 사용자가 작성한 SQL 문을 분석하여, 해당 작업을 **가장 효율적으로 수행할 수 있는 최적의 실행 계획(Execution Plan)**을 선택해주는 DBMS의 핵심 엔진이다.
옵티마이저의 종류는 다음과 같이 나뉩니다:
- Rule-Based Optimizer (RBO): 사전에 정의된 규칙(rule)에 따라 실행 계획을 선택
- Cost-Based Optimizer (CBO): 통계 정보와 비용(cost) 추정을 기반으로 가장 효율적인 실행 계획을 선택
Execution Plan (실행 계획)이란?
Execution Plan은 SQL 문을 실제로 어떻게 실행할지를 설명하는 실행 경로 또는 전략을 말한다.
즉, DBMS가 데이터를 어떤 인덱스를 사용할지, 어떤 조인 순서를 취할지, 어떤 방식으로 데이터를 읽고 필터링할지 등을 미리 계획한 것이다.
실행 계획을 통해 SQL이 얼마나 효율적으로 작동하는지, 병목 구간은 어디인지 등을 분석할 수 있다.
Execution Plan을 확인하는 이유
- 성능 저하의 원인을 파악하기 위해
- 불필요한 테이블 스캔, 비효율적인 조인 방식 등을 확인하기 위해
- 인덱스가 제대로 활용되고 있는지 확인하기 위해
주요 Execution Plan 요소
항목 설명
Operation | 어떤 작업이 수행되는지 (예: TABLE ACCESS, INDEX SCAN, NESTED LOOP 등) |
Object Name | 작업 대상이 되는 테이블이나 인덱스 이름 |
Cost | 상대적인 수행 비용 (낮을수록 좋음) |
Rows | 예측 결과로 반환될 로우 수 |
Access Predicate | 어떤 조건으로 접근하는지 (예: WHERE 절 조건 등) |
Filter Predicate | 접근 후 추가로 필터링되는 조건 |