안녕하세요 DB 실행계획은 하면할수록 알수가없어서
여기 가입도하고 질문도올립니다.
예제)
http://www.sqlfiddle.com/#!4/accac/1
NOT IN,NOT EXISTS 결과에대한 차이는 알고있습니다.
"그러나 실행계획이 같은가 다른가"에대한 의문이듭니다. 여러가지찾아보니
요즘은 옵티마이저가 둘다 조인으로 푼다라는 의견이 많더군요
옵티마이저 구버전의경우
NOT IN은 필터로 풀더군요 물론 DB설정이따라 NOT EXISTS 도 필터로 푸는경우도있긴하더군요
select /*+ OPTIMIZER_FEATURES_ENABLE('10.2.0.5') */
* from TABLE5 a
where a.column1 not in(select column2 from TABLE6);
select /*+ OPTIMIZER_FEATURES_ENABLE('10.2.0.5') */ * from TABLE5 A
where not EXISTS(select 1 from TABLE6 where column1='A1' and a.column1=column2);
위 링크에서도
둘다 HASH JOIN ANTI 으로 풉니다.물론(NA 옵션차이는 있지만)
에서는 해당컬럼이 NOT NULL 조건이면 항상 실행계획이같다는 의견과 그렇지않을수있다는의견도있어 멘붕중입니다.