Oracle IN 조건은 등치가 아니다? 0 1 4,570

by bodyMist [Oracle 기초] oracle sqlp query [2023.07.26 17:58:53]


SQLP 대비겸 친절한 SQL 튜닝 책을 정독하고 있습니다. 그 중 인덱스 스캔 효율화 파트를 읽으면서 궁금증이 풀리지 않아서 질문글을 올립니다.

본문에서는 "IN 조건은 '='이 아니다. IN 조건이 '='이 되려면 IN-List Iterator 방식으로 풀려야만 한다. 그렇지 않으면, IN 조건은 필터 조건이다." 라고 명시됩니다.

여기서 등치조건과 필터조건이 비교할 수 있는 단어인지가 헷갈립니다. 필터조건은 데이터를 걸러내기 위한 조건항목으로 생가하고 있었습니다. 그런데 등치(=) 관계와 비교를 하니까 큰 혼란이 왔습니다. 필터조건으로 사용된다고 한들 내부적으로는 결국 비교 List 항목들과 등치비교를 하는게 아닌가? 라는 생각을 해버렸습니다.


제가 글쓴이의 의도를 잘못 파악하고 있는 것인지, 책 내용 자체를 완전히 잘못 이해하고 있는지 알려주셨으면 합니다.

 

by 쩰리쿼리 [2023.07.27 14:41:53]

인덱스 스캔 효율화와 관련된 내용으로 아래문장이 작성되었다면
"IN 조건은 '='이 아니다. IN 조건이 '='이 되려면 IN-List Iterator 방식으로 풀려야만 한다. 그렇지 않으면, IN 조건은 필터 조건이다." 

위 문장의 의미는 아래와 같이 해석될수있을 것 같습니다.
"IN 조건은 인덱스 액세스 조건일수도 있고 아닐수도있다. IN 조건이 인덱스 액세스 조건이 되려면 IN-List Iterator 방식으로 풀려야만 한다. 그렇지 않으면, IN 조건은 필터 조건이다."

인덱스 스캔과 관련해서 액세스 방식과 필터 방식이 있는데 
등치조건 '=' 은 인덱스 액세스방식으로 풀이되어 해당 문장이 작성된것같습니다.

작성자의 이해대로 필터조건은 데이터를 걸러내기 위한 조건항목이고,
액세스조건은 데이터를 접근하는 조건항목이기 때문에 
IN을 '='과 같은방식으로 작동한다고 오해하면 안된다로 이해하시면 될것같습니다.

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