[CS 학습] SQL 실행
1. SQL 실행 과정
DBMS가 SQL 문을 처리하는 과정은 5단계로 나뉜다
- SQL 구문 분석
- SQL 구문 유효성 검사
- 실행 계획 수립
- 실행 계획 최적화
- 실행 계획 수행
1.1. SQL 구문 분석
구문 분석이라고도 하며 쿼리 파싱라고도 한다.
쿼리 파서는 요청 받은 쿼리를 토큰으로 분할하여 DBMS가 처리하기 쉽게 파싱한다.
토큰이란 쿼리를 DBMS가 이해할 수 있는 최소한의 단위(어휘)이다.
MySQL의 경우 이 단계에서 쿼리를 트리 구조의 토큰으로 만들어 낸다.
이 과정에서 기본 문법 오류가 있는지 확인하고 오류시 사용자에게 오류 메세지를 전달한다.
1.2. SQL 구문 유효성 검사
파서 과정을 거친 쿼리를 기반으로 문장 전체에 구조적 문제가 있는지 확인한다.
각 토큰의 테이블 명, 속성 명, 내장 함수 등을 매핑하고 해당 객체들이 존재하거 사용자의 권한이 유효한지 검증하는 단계이다.
1.3. 실행 계획 수립
이 단계는 DBMS의 옵티마이저가 담당한다.
검증된 쿼리를 가지고 어떻게 실행할지 계획을 수립하는 단계이다.
1.4. 실행 계획 최적화
들어온 요청을 저렴한 비용으로 빠르게 처리할 계획을 세우는 단계이다.
검색속도를 높이기 위해 어떤 테이블에 먼저 조인할지, 인덱싱을 사용할지, 검색 방법은 순차 검색할지 등을 판단한다.
1.5. 실행 계획 수행
최종적으로 채택한 계획을 수행하고 이를 사용자에게 응답한다.
이 단계는 DBMS의 실행 엔진이 수행을 한다.
2. SELECT 절 처리 순서
일반적인 쿼리 절에서 사용하는 순서는 다음과 같다
순서 | 키워드 | 설명 |
---|---|---|
1 | FROM | 쿼리의 대상이 되는 테이블 선택 |
2 | ON | 조인할 테이블(left) 선택 |
3 | JOIN | 조인 수행 |
4 | WHERE | 특정 조건을 만족하는 행만 선택 |
5 | GROUP BY | 특정 열을 기준으로 그룹 생성 |
6 | HAVING | 그룹에 대한 조건 지정 |
7 | SELECT | 조회할 속성 선택 |
8 | DISTINCT | 중복 결과 제거 |
9 | ORDER BY | 결과를 정렬 |
10 | LIMIT/OFFSET | 결과 제한 |
요약하자면
FROM으로 기본 테이블 선택 한후 JOIN을 하여 전체 테이블 선택, 이후 WHERE절을 통해 조건에 맡는 데이터를 선택하고 GROUP BY를 통해 그룹화, 이후 HAVING을 통해 그룹에서 조건에 맡는 데이터를 선택하고 이후 중복 데이터 제거, 정렬, 그리고 나타낼 결과를 제한한다.