먼저 여기서 나오는 Push는 인라인 뷰 안에 조건절을 밀어넣는 조건절 Pushing이 아니므로 헷갈리지 말자.
앞서 정리한것 처럼 서브쿼리 Unnesting 되지않은 서브쿼리는 항상 필터방식으로 진행되며 대개 실행계획상 맨 마지막에 처리된다.
하지만 서브쿼리의 필터 단계에서 많은 데이터를 거를수 있다면 서브쿼리를 먼저 실행하는것이 이득일 것이다.
이를 보완하는 힌트가 Push_Subq이며 No_Unnesting된 서브쿼리를 먼저 실행시킨다.
원리가 그렇듯 Push_Subq는 항상 Unnesting 되지않은 서브쿼리에만 실행되므로 주의하자.
예제
실행 계획을보니 메인쿼리부터 순서대로 진행되며 마지막(1번 실행계획)에 필터로 서브쿼리를 처리하는 모습이다.
위와 비슷한 쿼리 이지만, push_subq 힌트로인해 서브쿼리가 푸쉬되었다.
no_unnest 힌트도 항상 셋트로 따라옴을 기억하자.
실행계획상 서브쿼리이지만, emp인덱스부터 차근차근 올라가며 실행된다
만약 서브쿼리 단계에서 많은 데이터를 거를수 있었다면 효율적인 쿼리가 된다.