Query Processor

질의 처리기는 SQL을 해석하고, 예상 비용이 낮은 실행 계획을 고른다

SQL 실행은 문법 확인, 의미 분석과 바인딩, 비용 기반 최적화, 실행 엔진 호출로 이어집니다. 파서가 모든 오류를 혼자 잡는 것이 아니라 카탈로그와 통계 정보를 참조하는 분석 단계가 함께 작동합니다.

SQL
SELECT p.name, c.name
FROM products p JOIN categories c
  ON p.category_id = c.id
WHERE p.price > 500000;
Syntax 문법 오류 SELECT, FROM, WHERE의 문장 구조가 잘못된 경우
Semantic / Bind 객체 참조 오류 없는 테이블, 컬럼, 권한 문제처럼 의미 확인이 필요한 경우
1. Parse SQL을 내부 구조로 바꾼다

문장을 토큰과 트리 구조로 만들고 기본 문법을 확인한다.

2. Bind 이름과 권한을 실제 객체에 연결한다

카탈로그를 보고 테이블, 컬럼, 타입, 권한을 확인한다.

3. Optimize 예상 비용이 낮은 계획을 선택한다

통계 기반으로 인덱스, 조인 순서, 접근 방법을 비교한다.

4. Execute 계획을 실제 I/O로 실행한다

저장 시스템, 버퍼, 인덱스와 협력해 결과 행을 만든다.

Parse tree SQL 구조 표현

SELECT, FROM, JOIN, WHERE의 관계가 내부 노드로 표현된다.

Execution plan 접근 경로 목록

어떤 테이블을 먼저 읽고 어떤 인덱스를 쓸지 정리한다.

Rows 결과 집합

실행 엔진이 필터링, 조인, 정렬을 수행해 사용자에게 돌려준다.

Parser 문법을 이해 가능한 구조로 만든다

순수 문법 확인과 객체 존재 확인은 개념적으로 나누어 보는 편이 정확하다.

Optimizer 항상 최선이 아니라 추정상 좋은 계획이다

통계가 오래되거나 데이터 분포가 치우치면 실제 최적과 다를 수 있다.

Executor 계획은 저장 시스템 호출로 바뀐다

이 단계에서 버퍼 접근, 인덱스 탐색, 페이지 읽기가 실제로 일어난다.