1.1.1 구조적, 집합적, 선언적 질의 언어
SQL은 "Structured Query Language", 말그대로 구조적 질의 언어이다.
SQL 은 구조적이고, 집합적이고, 선언적인 질의 언어이다. 원하는 결과집합을 구조적 집합적으로 선언하지만, 그 집합을 만들어 내는 과정은 절차적일 수 밖에 없다
즉, 그 과정을 대신해주는 프로시저가 필요한데, 그게 바로 SQL 옵티마이저이다.
DBMS 내부에서 프로시저를 작성하고 컴파일 해서 실행 가능한 상태로 만드는 것을 SQL 최적화 이라고도 한다.
1.1.2 SQL 최적화
SQL 을 실행하기 전 최적화 과정은 아래와 같다.
- SQL 파싱 : SQL 파서가 파싱을 진행한다.
- SQL 문을 분석해서 파싱트리 생성, 문법이나 의미적으로 오류 있는 지 확인한다.
- SQL 최적화 : 옵티마이저가 다양한 실행경로중 가장 효율적인 하나를 선택
- 로우소스 생성 : 옵티마이저가 선택한 실행경로를, 실행 가능코드 혹은 프로시저 형태로 로우 소스 생성기가 포맷팅 한다.
1.1.3 SQL 옵티마이저
실행순서
1. 실행할 쿼리를 바탕으로 실행계획 후보군들 추려낸다.
2. 각 실행 계획의 예상비용을 산정한다.
3. 최저비용을 나타내는 실행계획을 선택한다.
1.1.4 실행계획과 비용
SQL*Plus 에서 AutoTrace를 활성화하고 SQL을 실행하면 실행 계획을 볼 수 있다.
인덱스 선택 기준은 비용 (cost) 이다.
1.1.5 옵티마이저 힌트
옵티마이저가 실행계획을 선택할때 실수할 가능성도 있다.
그 경우에는 옵티마이저 힌트를 통해서 데이터 액세스 경로를 바꿀 수 있다.
힌트는 아래와 같이 주석 기호에 '+' 를 붙인다.
SELECT
/*+ INDEX(A 이름_PK) */
EMPNO, ENAME, JOB
FROM EMP A
WHERE DEPTNO = '10';
주의 사항으로
- 힌트와 힌트 사이 "," 사용하면 안됨.
- 스키마명 명시 하면 안됨.
- ALIAS 사용 테이블은 반드시 힌트에도 사용해야 한다.
'친절한 SQL 튜닝' 카테고리의 다른 글
[친절한 SQL 튜닝] 1.2 SQL 공유 및 재사용 (0) | 2024.07.13 |
---|