1. 구문 분석(Parsing)

해당 쿼리가 문법적으로 틀리지 않은지 확인. 해당 구문을 SQL 서버가 이해할 수 있는 단위들로 분해하는 과정.


만약 구문이 부정확하다면 여기서 처리를 중단. 이 문장이 일괄 처리(batch) 내에 있다면 일괄 처리 전체를 중단.(Batch abort : Batch 중 하나라도 syntax error가 있다면 전체 batch가 실행되지 않는다.)

2. 최적화(Optimization)

통계나 조각 정보 등을 바탕으로 실행 계획을 만들어 낸다. 쿼리처리에서 매우 중요한 단계


① 쿼리 분석 : 검색 제한자(SARG)인지 조인 조건인지 판단.


② 인덱스 선택 : 분포 통계 정보를 이용하여 인덱스검색이나 테이블 스캔 중의 하나를 선택. 여러 인덱스 중 가장 효율적인 인덱스 하나를 선택


③ 조인 처리 : JOIN, UNION, GROUP BY, ORDER BY 절을 가지고 있는지 확인하여 적절한 작업 순서를 선택


이 단계의 출력은 실행 계획(Execution Plan) 이다.


SQL 최적화단계(Optimizer)

- Query Transformer : 쿼리블록으로 나누어 변형된 몇 종류의 쿼리문을 생산,  서브쿼리를 조인으로 변경한다든지, 뷰의 해체작업, 인라인뷰의 해체작업, FROM절의 테이블제거작업등을 거쳐 쿼리를 변형한다.

 

- Estimator : Query Transformer에서 생성된 몇종류의 SQL문장의 모든 Cost를 측정한다. Selectivity(선택도) , Cardinality, Cost등세가지 다른 측정방법을 이용하며 최소의 비용을 갖는 SQL문장을Plan Generator에게 넘긴다.    

- Plan Generator : 선택된 저비용 SQL문의 실행계획을 생성하여 Row Source Generator에게 넘긴다. 이렇게 생성한 실행계획도나중을 위해 Library Cache에 저장해 둔다.


예)
SELECT empno, ename,dname

  FROM emp e, dept d

WHERE e.deptno =d.deptno;

 

---------------------------------------------------------------------

| Id  | Operation                                |Name                   |

---------------------------------------------------------------------

|   0|   SELECT STATEMENT                  |                          |

|   1|   NESTED LOOPS                        |                          |

|   2|   NESTED LOOPS                        |                          |

|   3|   TABLE ACCESS FULL                  | DEPT                   |

| * 4|   INDEX RANGE SCAN                 | IDX_EMP_DEPTNO  |

|   5|   TABLE ACCESS BY INDEX ROWID | EMP                    |

------------------------------------------------------------------------

 

 

3. Row Source Generator 

옵티마이저의 최적화 과정을 거치면 SQL처리과정을 표현한 실행계획이 만들어 진다.

이런 실행계획을 실행 가능한 코드 또는 프로시저 형태로 포맷팅(tree형식으로 만듦)하는 작업이 필요하며, 이 역할을 Row-Source Generator가 담당 한다. Row-Source는 레코드 집합을 반복 처리하면서 사용자가 요구한 최종 결과집합을 실제적으로 생성하는데 사용되는 제어 구조를 말한다.

Row Source Generator는 Row Source Tree(명령문에의해 참조되는 테이블의 순서, Access Method, Join Method, Filter / Sort / Aggregation과 같은 데이터 오퍼레이션을 포함)를 생산하며 Row Source는 테이블, 뷰,조인이나 그룹핑의 결과등이 해당된다.


4. 실행(Execute)

QL실행 엔진이 각각의 Row Source Tree의 각각 로우 소스를 실행하여 결과를 Client로 보낸다. (INSERT/UPDATE/DELETE 같은 DML인 경우 반드시 거쳐야 한다.)

실행기간동안 DB는 메모리에 데이터가 없는 경우 디스크로부터 데이터를 읽으며 SQL문의 실행에 따른 변화를 로깅하거나 데이터 무결성을 지키기 위해 DBLOCK을 걸거나 LATCH를 획득한다.




SELECT 실행 순서 

1. 문법 순서

1. SELECT

2. FROM 

3. WHERE 

4. GROUP BY 

5. HAVING

6. ORDER BY  

2. 실행 순서

1. FROM

2. ON

3. JOIN

4. WHERE

5. GROUP BY

6. HAVING

7. SELECT

8. DISTINCT

9. ORDER BY

10. TOP

3.설명

해당 데이터가 있는 곳을 찾아가서 (FROM)

조건에 맞는 데이터로 필터링하고 (WHERE)

원하는 데이터로 가공 (GROUP BY)

가공한 데이터에서 조건에 맞는 것만(HAVING)

뽑아내서 (SELECT)

정렬한다(ORDER BY).

 

실행순서는 문법, 권한 검사 순서이기도 하고,

Alias 등록 순서 이기도 하다.

별칭(Alias)

FROM 절에서 테이블에 Alias를 사용했다면     (FROM Table1 AS T1)

SELECT, ORDER BY 절에서 사용할 수 있고      (SELECT T1.Col1, ORDER BY T1.Col1)

SELECT 절에서 컬럼에 Alias를 사용했다면       (SELECT T1.Col1 AS a)

ORDER BY 절에서 사용할 수 있다.                 (ORDER BY AS a)



출처 : http://ojc.asia/bbs/board.php?bo_table=LecOrccleTun&wr_id=113

http://wiki.gurubee.net/pages/viewpage.action?pageId=3901322

'SQL > SQL 튜닝' 카테고리의 다른 글

클러스터인덱스와 넌클러스터인덱스  (0) 2017.10.24
Nested Loop, Sort Merge, Hash JOIN  (0) 2017.10.23
옵티마이저 이해하기 - 1  (0) 2017.10.23
INDEX 튜닝  (0) 2017.10.23
쿼리튜닝팁  (0) 2017.09.20

+ Recent posts