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
반응형
'정보관리(데이터베이스, DB) > 오라클' 카테고리의 다른 글
[Oracle] TRUNCATE, DELETE, DROP 차이, 테이블 데이터 삭제 (1) | 2024.09.04 |
---|---|
보고서 sql 문 (0) | 2024.08.18 |
간단하게 컬럼 순서 변경하기(VISIBLE 사용X) (0) | 2024.08.18 |
백업을 위한 스냅샷 (1) | 2024.06.11 |
오라클 DB 백업 및 복구 (Oracle DB Backup & Restoration) (1) | 2024.06.08 |