SELECT E.* from J_EXEC E, SHI1.J_INST I where E.J_INST_ID=I.J_INST_ID and I.J_NAME='BATCH_121212345' and E.E_TIME =''
J_EXEC 테이블에 INDEX_01 (J_INST_ID,E_TIME) E_TIME은 컬럼 타입이 TIMESTAMP(6) 입니다. and E.E_TIME IS NULL 을 다르게 표현 할수 있을까요?
질문을 보면
아마도 인덱스가 타도록 하는 is null에 대하여 질문을 하시는 듯 합니다.
그런데 위의 sql과 인덱스를 보면
and e.e_time is null이라고 정상적으로 사용하시면
e_time이 마지막 인덱스 컬럼이므로 해당 데이타가 유효하게 인덱스를 타서 데이타를 가져올만하다고 옵티마이저가 판단하면(즉 선택성이 높으면) 인덱스가 탑니다.
여기서 중요한 것은 j_inst_id 까지만 인덱스를 access로 타고 is null 을 filter로 걸리는 것이 아니라
is null 까지 합쳐서 access로 플랜이 나온다는 것입니다.
그 이유는 복합 인덱스의 경우는 전체가 null이 아닌 이상 유효 컬럼까지 not null 이면 인덱스가 생성되기 때문입니다.