[DB] 쿼리 변환 - Push_Subq

최민석·2021년 7월 27일
0

서브쿼리 Push에 대해 알아보자

먼저 여기서 나오는 Push는 인라인 뷰 안에 조건절을 밀어넣는 조건절 Pushing이 아니므로 헷갈리지 말자.

앞서 정리한것 처럼 서브쿼리 Unnesting 되지않은 서브쿼리는 항상 필터방식으로 진행되며 대개 실행계획상 맨 마지막에 처리된다.

하지만 서브쿼리의 필터 단계에서 많은 데이터를 거를수 있다면 서브쿼리를 먼저 실행하는것이 이득일 것이다.

이를 보완하는 힌트가 Push_Subq이며 No_Unnesting된 서브쿼리를 먼저 실행시킨다.
원리가 그렇듯 Push_Subq는 항상 Unnesting 되지않은 서브쿼리에만 실행되므로 주의하자.

예제

  • 먼저 Push_Subq를 하지않은 쿼리이다.
    힌트로는 no_push_subq를 사용한다.


실행 계획을보니 메인쿼리부터 순서대로 진행되며 마지막(1번 실행계획)에 필터로 서브쿼리를 처리하는 모습이다.

  • Push_Subq를 활용한 쿼리이다.

위와 비슷한 쿼리 이지만, push_subq 힌트로인해 서브쿼리가 푸쉬되었다.
no_unnest 힌트도 항상 셋트로 따라옴을 기억하자.
실행계획상 서브쿼리이지만, emp인덱스부터 차근차근 올라가며 실행된다
만약 서브쿼리 단계에서 많은 데이터를 거를수 있었다면 효율적인 쿼리가 된다.

profile
🔥🔥🔥🔥 G U N F E 🔥🔥🔥🔥

0개의 댓글