본문 바로가기
정보관리(데이터베이스, DB)/오라클

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

by 3604 2024. 9. 3.
728x90

 

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

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

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

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

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

예제

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

 

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

  • Push_Subq를 활용한 쿼리이다.

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

출처: https://velog.io/@kw78999/DB-%EC%BF%BC%EB%A6%AC%EB%B3%80%ED%99%98-PushSubq

 

728x90
반응형