is null 조건도 index access가 가능할까요? 0 3 1,921

by 양양 [Oracle Tuning] [2022.11.07 22:10:54]


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

제 생각에 인덱스 필터조건은 불필요한 것 같은데 왜 나오는 것인지 가르침 부탁드려도 될까요?

 

by 마농 [2022.11.08 16:06:41]

왜 엑세스와 필터 양쪽에 다 나오는지는 모르겠지만.
일단 엑세스 쪽에 정상적으로 나오니. 필터는 크게 신경쓰지 않아도 되지 않을까? 생각됩니다.
그래도. 이유가 궁금하여 타 사이트에 질문 올려놓고 답변 기다리는 중입니다.
https://cafe.naver.com/dbian/5890


by 마농 [2022.11.10 15:15:20]

동등조건(등호=)이 아닌 범위조건(부등호)이 오면 당연하게 필터조건이 붙게 됩니다.
IS NULL 조건도 동등(=) 조건은 아니니까 필터가 붙는 듯 합니다.
논리적으로 보면 IS NULL 에 해당하는게 한가지 종류밖에 없으므로 동등조건과 동일하다고 볼수 있는데.
오라클 옵티마이저 내부 로직 IF 문 처리할때 IS NULL 에 대한 예외 조치가 없는 듯 하네요.
그냥 단순한게 = 이냐 아니냐로 판단하는 듯 합니다. (물론 추측입니다.)


by 양양 [2022.11.10 21:21:48]

답변 감사합니다. LIKE 또한 궁금한 부분이었는데 같이 공부가 되었습니다.

더불어 마농님의 몇년전 글에서도 많은 도움을 받고 있습니다.

어디서 근무하시는지는 모르겠지만 마농님이랑 근무하시는 동료분들이 부럽네요

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