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;
'DATABASE > 튜닝' 카테고리의 다른 글
[SQL 튜닝] 인덱스 기본 사용법 (0) | 2020.06.15 |
---|---|
[SQL 튜닝] 인덱스 구조 및 탐색 (0) | 2020.06.15 |
[SQL 튜닝] Table Full Scan VS Index Range Scan VS Index Full Scan (0) | 2020.06.08 |
[SQL 튜닝] 데이터베이스 저장 구조와 I/O 메커니즘 (0) | 2020.06.07 |
[SQL 튜닝] SQL 공유 및 재사용(라이브러리 캐시, SQL캐싱) (0) | 2020.06.07 |