SQL
옵티마이저가 SQL 을 어떻게 처리하는가
leexx
2023. 1. 17. 08:00
옵티마이저가 SQL 을 어떻게 처리하는가
- Database 에서 찾을게 있다면 (= 질의할 것이 있다면), SQL 로 찾는다
- 질의 = 물어봐서 답을 찾아내는 것
SQL
SQL 이란?
구조적 structured 이고, 선언적 declarative 이고, 집합적인 set-based 질의 언어
구조적, 선언적, 집합적의 의미가 무엇일까?
(1) 구조적 의 의미 structured
- SQL 의 원래 이름은 SEQUEL (Structured English QUEry Language) 이었는데, 지금은 저작권 이슈로 사용을 못한다고 한다. (그래서인지 SQL 을 시퀄로 읽는 경우를 종종 볼 수 있다)
- 여기서 구조적이라는 의미는 (구조적인) 영어 문법을 의미한다고 한다. 그래서 실제로 SQL 은 영어를 아주 조금이라도 알고있다면, 어떤 일을 하려는 쿼리인지 이해하는데는 큰 무리가 없다.
SELECT *
FROM t1
WHERE t1.col1 = "hello"
(2) 선언적 의 의미 declarative
- 어떤 작업들로 수행할 것인지를 작성하는 것을 말한다.
- 절차적, 선언적의 차이
- 상황 -> t1 의 col1 의 값이 hello 인 것을 찾는다
- 선언적 ✅ -> 목적
- t1 테이블에서 col1 의 값이 hello 인 것을 찾아라 (SELECT * FROM t1 WHERE t1.col1 = "hello")
- 절차적 -> 흐름
- t1 테이블을 조회해라
- t1 테이블에서 col1 의 값이 hello 인 값들을 찾아서, 메모리에 배열을 선언하고, 거기에 집어넣어라
- 그 배열을 반환해라
(3) 집합적 의 의미 set-based
- 데이터 뭉치를 반환한다
프로시저를 만드는 옵티마이저
- 질의문은 선언적으로 작성할 수 있지만, 실제 처리는 절차적으로 작동한다. 즉 사용자가 작성한 SQL 질의는 절차적으로 바뀌어야 하는데, 이를 해주는 것이 옵티마이저이다. 그리고 이를 (= 옵티마이저에 의해, 실행 가능하도록 절차적으로 바뀐 질의를) 프로시저라고 한다.
- (1) 사용자가 쿼리를 작성했다.
- (2) 옵티마이저가 프로시저를 만든다.
- (3) 프로시저가 만들어졌고, 실행 준비가 완료되었다.
참고
- 책 - 친절한 SQL 튜닝 > 1.1 SQL 파싱과 최적화
- medium by su_bak