우리가 작성하는 SQL쿼리는 절차적 언어가 아닌 선언적 언어다.
그 말은 우리가 작성한 쿼리가 직접 실행되는 것이 아니라, select 할거야 하고 선언을 하면 우리가 작성한 쿼리가 그에 맞는 실행될 수 있는 명령어로 바뀌어서 실행된다는 얘기이다.
다시 돌아와서 그럼 그 과정은 어떻게 될까?
크게 5가지 단계로 나뉘게 된다.
1. SQL쿼리 작성
2. Parser - parsing
3. 옵티마이저 - 최적화
4. row-source generation - row-source 생성
5. SQL엔진 - 실행
우리가 작성한 SQL쿼리가 DB서버에 전달이 되면 DBMS에서 parser가 parsing을 해준다.
parsing에는 크게 2가지 스텝이 존재하는데,
첫번째 스텝은 문법과 권한 및 오브젝트 체크이다.
우선 문법적으로 쿼리가 오류가 있는지 확인을 한다. 그리고 오류가 있다면 에러를 발생시킨다.
만약 오류가 없다면 다음으로는 권한과 오브젝트를 체크한다. 접속한 사용자가 해당 쿼리를 실행시킬 권한이 있는지를 판단하고, 해당 오브젝트(테이블이나 칼럼 등)가 올바른지 확인한다.
두번째 스텝은 library cache를 확인한다.
library cache에 현재 전달된 쿼리가 존재하는지(이전에 실행된 쿼리인지)를 확인한다. 캐시로 남아있다면,
해당 쿼리 실행 계획으로 쿼리를 실행한다.
남아있지 않다면, 옵티마이저에게 최적화를 부탁한다. 그러면 옵티마이저는 최적에 가까운 실행계획을 찾고, 해당 실행계획을 실행할 수 있는 row-source를 생성하고 쿼리를 실행한다.
다시 정리하자면 cache에 남아있다면
sql query - parsing - cache - execution
남아있지 않다면
sql query - parsing - optimization - source-generation - execution
[참고]
https://mentha2.tistory.com/206
http://wiki.gurubee.net/pages/viewpage.action?pageId=4948304
'TIL' 카테고리의 다른 글
[Git] git remote, 원격 저장소 확인, 추가, 수정, 삭제 (0) | 2021.10.20 |
---|---|
[Java] 동시성, 스레드 조심해야할 사항1 (0) | 2021.08.07 |
[Git] Fork, Pull Request, Clone, Push (0) | 2021.08.01 |
[Spring] Filter란, (0) | 2021.07.30 |
[Git] fork, pull request, rebase (0) | 2021.07.26 |