is not null을 걸면 인덱스가 안걸려서 쿼리속도가 4,5초나오는대 데체방이 있나요
해결방안 부탁드립니다
기본적으로 인덱스는 null 에 대해서는 제대로 동작할 수 없습니다. 컬럼의 데이터 중 대부분의 null 일 경우 not null 의 데이터를 찾을 때 괜찮게 쓰일 수 있는 방법이 있습니다. 문자 데이터의 경우 where col1 > ' ' 숫자 데이터의 경우 (코드성일 경우) where col1 >= 0 이런식으로 사용할 수 있습니다.
컬럼의 null, 데이터 분포도 등에 따라 솔루션이 달라질 수 있습니다.
is not null 을 걸면 인덱스를 안탄다? 글쎄요? 그 반대일 텐데요? 아무 조건 없을 땐 안타다가 조건 주면 타는 경우는 있어도. 조건을 주어서 안타는 경우는 없을 듯 합니다. 조건을 줬는데도 불구하고 안타는 경우는 있을 수 있겠지만. 조건 때문에 안타는 것은 아닐 것으로 생각됩니다.
특정 키워드 만으로 튜닝하는 법은 없습니다. 전체 쿼리와 테이블에 대한 정보를 가지고 튜닝해야 합니다.
is not null 이 부정형 비교라 인덱스 스캔이 안될 겁니다. index full scan 으로 실행계획이 풀리는 경우가 있긴 한데 데이터가 많다면 위의 스캔도 그렇게 효율적이지는 않을겁니다. 잘 정리한 문서가 있어서 링크합니다. http://wiki.gurubee.net/pages/viewpage.action?pageId=27427980
not때문에 index안탈껍니다
부정형 조건의 경우 index 안타게 되있어요
NOT 은 부정형이므로 인덱스를 안탄다? 과연 그럴까요? 예를 들면 emp 테이블에 deptno 에 인덱스가 걸려 있고, 다음과 같은 쿼리가 수행된다면? 결과는 어떻게 될까요? 1) SELECT deptno FROM emp; --> Table Full Scan 2) SELECT deptno FROM emp WHERE deptno IS NOT NULL; --> Index Full Scan