'SQL 최적화'란 DBMS 내부에서 프로시저를 작성하고 컴파일해서 실행 가능한 상태로 만드는 전 과정을 의미한다.
- 프로시저를 만들어내는 DBMS 내부 엔진을 SQL 옵티마이저라고 한다.
- 사용자로 부터 전달받은 쿼리를 수행하는 데 후보군이 될만한 실행계획들을 찾아낸다.
- 데이터 딕셔너리에 미리 미리 수집해 준 오브젝트 통계 및 시스템 통계정보를 이용해 각 실행계획의 예상비용을 산정한다.
- 최저 비용을 나타내는 각 실행계획의 예상비용을 산정한다.
-
옵티마이저 진행시 고려 사항
- 테이블, 컬럼, 인덱스 구조에 관한 기본 정보
- 오브텍트 통계: 테이블 통계, 인덱스 통계, 컬럼 통계
- 시스템 통계: CPU 속도, Single Block I/O 속도, MultiBlock I/O 속도
- 옵티마이저 관련 파라미터
-
옵티마이저 힌트 사용시 주의사항
- 힌트 안에 인자를 나열할 땐 ','를 사용할 수는 있지만, 힌트와 힌트 사이에는 사용하면 안된다.
- /*+ INDEX(A A_X01) INDEX(B, B_X01) */
- /*+ INDEX(C), FULL(D) */ -> 첫 번째 힌트만 유효
- 테이블을 지정할 때 아래와 같이 스키마명까지 명시하면 안된다.
- SELECT /*+ FULL(SCOTT.EMP) */ FROM EMP -> 무효
- FROM 절 테이블명 옆에 ALIAS를 지정했다면, 힌트에도 반드시 ALIAS를 사용해아한다.
- SELECT /*+ FULL(EMP) */ FROM EMP E -> 무효