SQL(Structured Query Language) : 구조적(structured)이고 집합적(set-base)이고 선언적인(declarative) 질의 언어
SQL 옵티마이저 : 사용자가 원하는 작업을 가장 효율적으로 수행할 수 있는 최적의 데이터 엑세스 경로를 선택해주는 DBMS핵심 엔진
서버 프로세스 :
SQL 최적화 : DBMS에서 프로시저를 작성하고 컴파일해서 실행가능한 상태로 만드는 과정
SQL 최적화 과정
1. SQL 파싱 : 파싱트리생성 > Syntax체크 > Semantic체크(의미상 오류)
2. SQL최적화 : 옵티마이저가 미리 수집한 시스템 및 통계정보를 바탕으로 다양한 실행경로를 생성해 가장 효율적인 하나를 선택
3. 로우소스 생성 : 선택한 실행경로를 실제 실행 가능한 코드 또는 프로시저 형태로 포맷팅한다.
옵티마이저의 최적화 단계
1. 사용자의 SQL 쿼리를 수행하는 실행계획을 찾는다.
2. Data Dictionary에 미리 수집해 놓은 오브젝트, 시스템 통계 정보를 이용해 실행계획의 예상 비용을 산정한다.
3. 최저 비용인 실행계획을 선택한다.
비용(Cost) : 쿼리를 수행하는 동안 발생할것으로 예상되는 I/O횟수 또는 예상 소요시간을 표현한 값
옵티마이저 힌트 사용방법
- 주석 기호에 + 를 붙인다. : /*+ INDEX(A 고객_PK)*/
- 힌트를 완벽하게 다 사용하지 않아도 된다. (사용하지 않은곳은 옵티마이저가 자율적으로 선택함)
힌트 사용 주의사항
1) 힌트안에 인자 나열시 ,(콤마) 사용 가능하지만 힌트 사이에 사용하면 , 이후 힌트가 무효가 된다.
예) /*+INDEX(A, 고객_PK) INDEX(B, 상품_PK)*/ => 유효
/*+INDEX(A, 고객_PK), INDEX(B, 상품_PK)*/ => 첫번째 힌트만 유효
2) 테이블 지정시 스키마 명까지 명시하면 안됨
3) 테이블명 ALIAS를 지정했다면 힌트도 반드시 ALIAS사용해야함 (테이블명 쓰면 무시됨)
SQL공유, 재사용
라이브러리 캐시 : 생성했던 내부 프로시저를 반복, 재사용 할수 있도록 캐싱해두는 공간
캐시 사용과정
사용자가 SQL을 실행시 DBMS