PUSH_PRED 힌트는 메인 쿼리의 WHERE 조건을 서브쿼리 내부로 밀어넣어 서브쿼리에 대한 프레디케이트 푸시다운(Predicate Pushdown) 을 강제하는 힌트입니다. 특정 상황에서는 실행 성능을 최적화할 수 있습니다.

✅ 기본 사용법

위와 같은 구조에서 PUSH_PRED 힌트를 사용하면 sub.sal > 3000 조건이 서브쿼리 내부로 밀려들어가 조인 이후가 아니라 조인 전에 필터링될 가능성이 커집니다.

✅ 언제 사용해야 하나?

  • 인라인 뷰(서브쿼리)가 포함된 SQL에서 WHERE 조건이 서브쿼리 내부에서 먼저 적용될 때 성능이 좋아질 경우
  • 불필요한 데이터 스캔을 줄이기 위해 서브쿼리 내부에서 미리 필터링할 때
  • 서브쿼리가 복잡한 조인을 포함하는 경우, 먼저 필터링하는 것이 효율적일 때

✅ 주의할 점

  • PUSH_PRED가 항상 성능을 향상시키는 것은 아닙니다. 경우에 따라서는 오히려 최적화된 실행 계획을 방해할 수도 있음.
  • Oracle 옵티마이저는 기본적으로 서브쿼리 내 프레디케이트를 자동으로 푸시할 수 있으므로, 강제할 필요가 없는 경우도 있음.

✅ 함께 사용하면 좋은 힌트

  • PUSH_SUBQ
    → 서브쿼리를 INLINE VIEW가 아닌 SCALAR SUBQUERY 형태로 변경하면서 프레디케이트를 푸시할 때 유용함.
  • INLINE
    → 옵티마이저가 서브쿼리를 뷰로 처리하는 것을 방지하고, 인라인 뷰로 유지하도록 강제.

이런 힌트를 조합하면 옵티마이저가 서브쿼리를 최적화하는 방식에 영향을 줄 수 있습니다.

결론:

  • PUSH_PRED는 서브쿼리 내에서 WHERE 조건을 미리 적용하여 불필요한 데이터 스캔을 줄이는 데 유용함.
  • 옵티마이저가 자동으로 적용하는 경우가 많으므로, 실행 계획 확인 후 성능 향상이 필요한 경우에만 사용하는 것이 좋음.
  • 특정 케이스에서는 PUSH_SUBQ, INLINE 힌트와 함께 사용하면 더 효과적일 수 있음.

zerg96

Share
Published by
zerg96

Recent Posts

노트북(윈도우)에서 아이폰 유선 테더링 하기

윈도우 운영체제의 노트북에서는 iPhone 유선 테더링이 잘 안되는 경우가 많습니다. 보통 iPhone의 드라이버가 설치가 안되있어서인…

3일 ago

오라클 래치(Latch)

오라클 데이터베이스의 성능을 논할 때, 내부적으로 발생하는 경합(Contention)은 피할 수 없는 주제다. 특히 다수의 프로세스가…

7일 ago

사장님도 3표, 나도 3표? ‘3%룰’ 완전 정복!

안녕하세요, 혹시 이런 생각해 본 적 없으신가요? "내가 투자한 회사는 누가 감시하고, 어떻게 운영될까?" 오늘은…

3주 ago

Vector Store(벡터 스토어)

'벡터 스토어' 완벽 가이드: AI 시대, 데이터의 새로운 심장을 만나다 IT 업계는 인공지능(AI)이라는 거대한 패러다임의…

3주 ago

Gemini CLI (재미나이 CLI)

1. Gemini CLI란 무엇인가요? Gemini CLI는 터미널 환경에서 직접 Gemini 모델과 상호작용할 수 있도록 만들어진…

3주 ago

과적합 (overfitting)

과적합은 머신러닝에서 학습용데이터를 과하게 학습하여, 실제데이터를 예측하지 못하는 현상을 말합니다. 인공지능(AI)의 학습 방법은 우리가 시험공부를…

1개월 ago