SQL 수행 구조
SQL이 파싱, 최적화, 실행 단계를 거쳐 결과를 반환하는 흐름을 초보자도 따라갈 수 있게 정리합니다.
출제 빈도 ★★★☆☆ 관련 문제 2개 |
ParsingOptimizationExecution SQL은 바로 실행되지 않습니다
사용자가 SQL을 보내면 DBMS는 문장을 곧장 읽어 데이터를 찾지 않습니다. 먼저 문법을 확인하고, 어떤 방법으로 실행할지 고른 뒤, 실제 데이터 접근을 수행합니다.
SQL 입력 → 파싱 → 최적화 → 실행 계획 생성 → 실행 → 결과 반환
이 흐름을 알아야 실행 계획, 인덱스, 조인 방식, 옵티마이저 문제를 연결해서 이해할 수 있습니다.
파싱
파싱은 SQL 문장을 DBMS가 이해할 수 있는 구조로 바꾸는 단계입니다.
- 문법이 맞는지 확인합니다.
- 테이블과 컬럼이 실제로 존재하는지 확인합니다.
- 사용자가 해당 객체에 접근할 권한이 있는지 확인합니다.
SELECT ename, sal
FROM emp
WHERE deptno = 10;
컬럼 이름을 틀리거나 권한이 없으면 실행 단계까지 가지 못하고 파싱 과정에서 오류가 납니다.
최적화
최적화는 같은 결과를 만드는 여러 방법 중 비용이 낮은 방법을 고르는 단계입니다.
예를 들어 deptno = 10 조건이 있을 때 DBMS는 다음 선택지를 비교합니다.
- 테이블 전체를 읽습니다.
deptno인덱스를 사용합니다.- 조인이 있다면 어떤 테이블을 먼저 읽을지 정합니다.
- 조인 방식으로 NL, Hash, Sort Merge 중 무엇을 쓸지 정합니다.
최적화 결과가 실행 계획입니다.
실행
실행 단계에서는 실행 계획대로 실제 블록을 읽고, 조건을 평가하고, 조인과 정렬을 수행합니다.
성능 문제는 대개 이 단계에서 드러납니다. 너무 많은 블록을 읽거나, 불필요한 정렬을 하거나, 잘못된 조인 순서를 선택하면 응답 시간이 길어집니다.
소프트 파싱과 하드 파싱
DBMS는 이미 처리한 SQL의 실행 계획을 공유 영역에 보관할 수 있습니다.
| 구분 | 의미 | 비용 |
|---|---|---|
| 소프트 파싱 | 기존 실행 계획을 재사용 | 낮음 |
| 하드 파싱 | 새로 최적화하고 실행 계획 생성 | 높음 |
조건 값만 바뀌는 SQL은 바인드 변수를 사용하면 실행 계획 재사용 가능성이 높아집니다.
SELECT ename
FROM emp
WHERE empno = :empno;
값을 문자열로 계속 붙여 SQL을 만들면 매번 다른 SQL로 인식되어 하드 파싱이 늘 수 있습니다.
시험장에서 보는 핵심
- SQL 수행은 파싱, 최적화, 실행 순서로 이해합니다.
- 실행 계획은 최적화 단계의 산출물입니다.
- 바인드 변수는 실행 계획 재사용과 파싱 비용 절감에 도움이 됩니다.
- 성능 튜닝은 SQL 문장만이 아니라 데이터 접근 경로를 바꾸는 작업입니다.
한 문장 요약
DBMS는 SQL을 이해하고, 실행 방법을 고른 뒤, 그 계획대로 데이터를 읽습니다.