SQL 파싱과 최적화

SQL은 구조적, 집합적, 선언적이다. 

원하는 결과 집합을 구조적, 집합적으로 선언하지만, 그 결과 집합을 만드는 과정은 절차적일 수밖에 없음

즉 프로시저가 필요한 것이다. SQL에서 그러한 프로시저를 만들어 내는 DBMS 내부 엔진이 SQL옵티마이저

 

사용자 -> SQL -> SQL옵티마이저 -> 실행계획 -> 프로시저

 

1) SQL 파싱 : 파싱 트리 생성, Syntax체크, Semantic체크

2) SQL 최적화 : 옵티마이저가 통계정보를 바탕으로 여러 개의 실행 경로를 생성/비교하여 가장 효율적인 경로를 선택

3) 로우 소스 생성 : 실행 가능한 프로시저 형태로 포맷팅

 

SQL 옵티마이저

- 전달받은 쿼리를 수행하기 위한 후보군이 될 실행계획을 찾음

- 데이터 딕셔너리에 수집한 통계정보를 바탕으로 각 실행계획별 예산비용을 계산 후, 최저비용의 실행계획을 선택

 

비용 Cost

- 쿼리를 수행하는 동안 발생할 것으로 예상하는 I/O횟수 또는 예상 소요시간을 표현한 값

- 실행경로를 선택하기 위해서 옵티마이저가 여러 가지 통계정보를 활용하여 계산한 값

 

힌트 Hint

- 데이터 또는 업무 특성을 활용하여 개발자가 직접 더 효율적인 액세스 경로를 지정할 수 있음

- Hint를 사용해서 데이터 액세스 경로를 바꿀 수 있음

- /*+ ~~~ */

- 힌트사이에 , X

- 테이블에 별칭을 지정한 경우 힌트에도 별칭을 반드시 사용

- 테이블에 스키마 명시 X

select * from t where deptno = 10 and no = 1;
select  /*+ index(t t_x02)*/ * from t where deptno = 10 and no = 1;
select  /*+ full(t)*/ * from t where deptno = 10 and no = 1;