SELECT 절에 힌트 기술
ordered 힌트 : FROM 절에 기술한 순으로 조인 수행 명령
leading 힌트 : FROM 절에 기술한 순서 상관없이 직접 순서 명시
use_nl 힌트 : NL 조인 방식 명령
예시
: A→B→C→D 순으로 조인하되, B와C은 NL 조인으로 D은 Hash 조인으로 진행
: C→A→D→B 순으로 조인하되, A와D는 NL 조인으로 B은 Hash 조인으로 진행
: 옵티마이저가 조인 순서를 정하되 A,B,C,D 테이블은 NL 조인으로 진행
FROM 절에 힌트 기술
SELECT ~
FROM 주문 o
inner loop join 고객 c on (~)
inner hash join 결제방식 t on (~)
WHERE ~
OPTION (force order)
디스크 I/O는 비용이 많이 들기 때문에, 디스크에서 데이터 블록을 읽을 때, 곧이어 읽을 가능성이 큰 블록들을 함께 읽어 캐시에 미리 적재해두는 기능
NL 조인에서 Outer 쪽(드라이빙 테이블) 인덱스를 Unique Scan하는 상황을 제외하고는 언제든 Prefetch 실행계획이 나타날 수 있음
실행계획 → Inner(드리븐) 테이블 엑세스가 Nested Loops 위쪽에 표시
Oracle 11g에 시작된 배치 I/O 매커니즘
NL 조인 시, Inner 쪽 인덱스만으로 조인을 수행하고 나서 테이블과의 조인은 나중에 일괄 처리하는 메커니즘
→ 더 정확히는 Inner 쪽 인덱스와 조인을 모두 완료하고 나서 테이블을 엑세스하는 것이 아니라 일정량씩 나누어 처리함❗️
테이블 엑세스를 나중에 처리하지만 부분범위처리는 정상 동작
배치 I/O 과정에서 데이터 정렬 순서가 달라질 수 있음 (예시.SQLP 2권 50번)
→ 정렬를 위해 드라이빙 테이블을 선정렬하고 드리븐 테이블과 NL 조인할 때, 출력 순서가 틀려질 수 있느니 no_nlj_batching 힌트 명시하기
힌트: /*+ nlj_batching*/
, /*+ no_nlj_batching*/