create table nt(col1 number, col2 number, col3 number);
create index idx_nt on nt(col1,col2);
1) 일반적인 사용
select *
from nt
where col1 =5
and col2 > 3;
## 인덱스 엑세스 조건 : col1=5 and col2>3
2) is null 사용
select *
from nt
where col1 is null
and col2 > 3;
## 인덱스 엑세스 조건 : col1 is null and col2 > 3
## 인덱스 필터 조건 : col2 >3
제 생각에 인덱스 필터조건은 불필요한 것 같은데 왜 나오는 것인지 가르침 부탁드려도 될까요?
왜 엑세스와 필터 양쪽에 다 나오는지는 모르겠지만.
일단 엑세스 쪽에 정상적으로 나오니. 필터는 크게 신경쓰지 않아도 되지 않을까? 생각됩니다.
그래도. 이유가 궁금하여 타 사이트에 질문 올려놓고 답변 기다리는 중입니다.
https://cafe.naver.com/dbian/5890
동등조건(등호=)이 아닌 범위조건(부등호)이 오면 당연하게 필터조건이 붙게 됩니다.
IS NULL 조건도 동등(=) 조건은 아니니까 필터가 붙는 듯 합니다.
논리적으로 보면 IS NULL 에 해당하는게 한가지 종류밖에 없으므로 동등조건과 동일하다고 볼수 있는데.
오라클 옵티마이저 내부 로직 IF 문 처리할때 IS NULL 에 대한 예외 조치가 없는 듯 하네요.
그냥 단순한게 = 이냐 아니냐로 판단하는 듯 합니다. (물론 추측입니다.)
답변 감사합니다. LIKE 또한 궁금한 부분이었는데 같이 공부가 되었습니다.
더불어 마농님의 몇년전 글에서도 많은 도움을 받고 있습니다.
어디서 근무하시는지는 모르겠지만 마농님이랑 근무하시는 동료분들이 부럽네요