RE IN과 EXIST의 차이점은 뭐죠? 1 2 5,798

by 최단경로 Subquery 제공자 확인자 [2008.08.01 13:17:22]


안녕하세요.

짧은 식견으로 몇자 적어 봅니다.

finecomp 님이 답변을 해 주셨지만 좀 더 상세히 말씀드리고자 합니다.

SubQuery 는 두가지 역할 개념이 존재합니다.

첫째 확인자 역할

- Main Query 가 먼저 수행되어 Main Query 결과가 SubQuery 에 상수 값으로 제공되어
  Subquery 의 조건을 체크

둘째 제공자 역할

- SubQuery 가 먼저 실행되어  SubQuery 결과가 Main Query 에 상수 값으로 제공되어
  Main Query의 조건을 체크

이것이 Subquery 의 역할이고요.

In 과 Exists 의 차이점은 내부적 차이점이 존재 합니다.

In 실행계획을 보게 되면 concatenation + iterator 형태로 실행계획이 만들어 지게 됩니다.

concatenation 으로 Plan 이 만들어진다면 내부적으로 IN (’01’, ’02’, ’03’) 은

select 03’ from dual
union all
select ’02’ from dual
union all
select ’01from dual

형태로 뒤에서 부터 읽여지는 방식이고

Iterator 실행계획이 만들어 진다면 내부적으로 IN (’01’, ’02’, ’03’) 은 Buffer 에 담겨서 바인딩되게 됩니다.

select  :변수 from dual

위와 같이 실행이 됩니다.

그럼 Exists 는 어떨까요?

Exists 의 실행 계획을 보게 되면 대부분 Filter로 풀리는 경향이 존재 합니다
물론 Filter 의 종류도 여러가지죠. 
Filter 의 종류는 Nested Loop 와 비슷한 역할을 하는 것과 정말 Filter 역할을 하는 것이 존재합니다.
여기서 이 주제까지 이야기하기는 시간이 많이 걸리므로.. 차후 시간이 되면 제가 자료를 올려 드리도록 하겠습니다.

아무튼 Exists 는  서브쿼리의 결과가 ’참’, ’거짓’을 판단하여 리턴해 주는 것이기에
해당 조건을 만족하면 바로 빠져나와 버리죠.

글은 썼는데. 이해가 되실려는지는 잘 모르겠네요. ^^

Subquery 의 내용에 대해서는 대용량 책에 잘 나와 있습니다. 참조 하시면 될것 같네요. ^^

 

그럼. 수고하세요~~

ps.. 혹시 내용이 잘 못된 부분이 있으면.. 코멘트 남겨주세요. ^^;

by 어흥 [2009.07.01 19:46:12]
감사합니다.

by 희망이 [2009.09.04 02:10:22]
질문과 답변 출처 밝히고
blog.naver.com/astrobeauty로 업어갑니다.^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입