[SQL 튜닝] 드라이빙 테이블(DRIVING TABLE)의 개념/결정 규칙
일단 조인 시 driving table로서 row수가 적은 테이블이 선정되여야 하는 것은 분명하다.
그럼 어떻게 이건 결정되는 걸까?
Driving / Driven 테이블 결정규칙
-
**규칙기반 옵티마이저(Rule Based Optimizer, RBO)**에서는 연산자, 인덱스 유무, 조건절 형태 등 정해진 규칙의 우선순위에 따라 실행계획을 생성한다.
- 인덱스 사용한 엑세스 방식이 전체 테이블 엑세스 방식보다 우선순위 높음
- 조인 칼럼에 대해 인덱스가 양쪽 테이블 모두 존재할 때, 우선순위가 높은 테이블 선택
- 조인 칼럼에만 인덱스 존재하는 경우 인덱스가 없는 테이블을 먼저 선택해 조인 수행
- 조인 테이블의 우선순위가 동일하지 않으면 FROM 절에 나열된 테이블 역순으로 수행
-
비용기반 옵티마이저 (Cost Based Optimizer, CBO) - 규칙의 우선순위 X 소요 예상 비용 바탕으로 실행 계획 생성.
- 두 칼럼 모두 각각 인덱스가 있는 경우 : 옵티마이저 판단으로 row수가 적은 테이블 선택
- 인덱스 있는 테이블을 driven으로 수행하도록 실행계획 수립 (인덱스 없는것을 driving) → 풀스캔 막기 위해서 (driven 테이블에 조회하는게 더 비싸다)
- 두 칼럼 모두 인덱스 없을 때 : 적절히 옵티마이저가 row 수 보고 선택
⇒ 고정 시키려면 STRAIGHT_JOIN
을 사용하자!