NOT IN,NOT EXISTS 실행계획 차이 0 1 1,225

by 제르DX [2021.04.16 21:08:31]


안녕하세요 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 옵션차이는 있지만)

 

https://stackoverflow.com/questions/8655613/not-in-or-not-exists-which-is-faster-in-oracle10g/8655670

 

에서는 해당컬럼이 NOT NULL 조건이면 항상 실행계획이같다는 의견과 그렇지않을수있다는의견도있어 멘붕중입니다.

 

by 뉴비디비 [2021.04.17 13:18:24]

똑같은 쿼리도 운영하다보면 데이터 양이나 테이블관계, 설정 등등 상황에 따라 실행계획이 달라질 수도 있는데, 
개인적으로는 어떤 조건에서는 항상 실행계획이 고정된다고 보기는 어려울 것 같습니다. 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입