SQLP 대비겸 친절한 SQL 튜닝 책을 정독하고 있습니다. 그 중 인덱스 스캔 효율화 파트를 읽으면서 궁금증이 풀리지 않아서 질문글을 올립니다.
본문에서는 "IN 조건은 '='이 아니다. IN 조건이 '='이 되려면 IN-List Iterator 방식으로 풀려야만 한다. 그렇지 않으면, IN 조건은 필터 조건이다." 라고 명시됩니다.
여기서 등치조건과 필터조건이 비교할 수 있는 단어인지가 헷갈립니다. 필터조건은 데이터를 걸러내기 위한 조건항목으로 생가하고 있었습니다. 그런데 등치(=) 관계와 비교를 하니까 큰 혼란이 왔습니다. 필터조건으로 사용된다고 한들 내부적으로는 결국 비교 List 항목들과 등치비교를 하는게 아닌가? 라는 생각을 해버렸습니다.
제가 글쓴이의 의도를 잘못 파악하고 있는 것인지, 책 내용 자체를 완전히 잘못 이해하고 있는지 알려주셨으면 합니다.
인덱스 스캔 효율화와 관련된 내용으로 아래문장이 작성되었다면
"IN 조건은 '='이 아니다. IN 조건이 '='이 되려면 IN-List Iterator 방식으로 풀려야만 한다. 그렇지 않으면, IN 조건은 필터 조건이다."
위 문장의 의미는 아래와 같이 해석될수있을 것 같습니다.
"IN 조건은 인덱스 액세스 조건일수도 있고 아닐수도있다. IN 조건이 인덱스 액세스 조건이 되려면 IN-List Iterator 방식으로 풀려야만 한다. 그렇지 않으면, IN 조건은 필터 조건이다."
인덱스 스캔과 관련해서 액세스 방식과 필터 방식이 있는데
등치조건 '=' 은 인덱스 액세스방식으로 풀이되어 해당 문장이 작성된것같습니다.
작성자의 이해대로 필터조건은 데이터를 걸러내기 위한 조건항목이고,
액세스조건은 데이터를 접근하는 조건항목이기 때문에
IN을 '='과 같은방식으로 작동한다고 오해하면 안된다로 이해하시면 될것같습니다.