1.1 SQL 파싱과 최적화
- SQL은 구조적, 집합적, 선언적 질의 언어로
결과 집합을 만들기 위한 과정은 절차적 - 프로시저가 필요
- 프로시저를 만들어내는 DBMS 내부엔진
- ✨ 프로시저란, 옵티마이저가 자동으로 만들어내는 실행 계획(처리 로직)
SQL 최적화
- SQL 최적화란 SQL 실행 전 단계
- (1) SQL 파싱 → (2) SQL 최적화 → (3) 로우 소스 생성 단계를 거침
- (1) SQL 파싱
- 파싱 트리 생성
- Syntax 체크(문법 체크)
- Semantic 체크(의미 체크)
- (2) SQL 최적화
- 옵티마이저가 담당
- ✨ 옵티마이저는 데이터베이스 성능을 결정하는 가장 핵심적인 엔진
- 다양한 정보를 바탕으로 실행경로 생성 및 선택 - 비용 기반, 규칙 기반
- (3) 로우 소스 생성
- 로우 소스 생성기가 담당
- 옵티마이저가 선택한 경로를 실행 가능 코드 or 프로세스로 포맷팅
SQL 옵티마이저
- 사용자의 SQL을 가장 효율적으로 실행하기 위해
최적의 데이터 액세스 경로를 선택하는 DBMS 핵심 엔진
- 어떻게 선택? 비용 산정 후 최저 비용 경로 선택
- 그럼 비용이란? 예상 I/O 횟수 또는 예상 소요 시간
- ❗어디까지나 예상치임을 주의하자, 실측치❌
- ✨ 실행 계획 : 옵티마이저가 생성한 처리 절차를 표현
옵티마이저 힌트
- 옵티마이저도 항상 완벽한 선택❌, 실수⭕
- 통계 정보에 담을 수 없는 데이터 or 개발짬 이용해서 데이터 액세스 경로 수동 변경
- 힌트 사용법 :
/*+ INDEX(A 고객_PK)*/
- ❗옵티마이저 힌트는 주석처리되므로 힌트를 잘못 처리해도 파악이 어려움 주의
- 옵티마이저 힌트 사용법은 애플리케이션 환경에 따라 다름
- 옵티마이저의 판단에 맡기는 경우 or 옵티마이저의 실수를 용납하지 않는 경우
ref. https://product.kyobobook.co.kr/detail/S000001975837