반응형

프로젝트를 진행하다 보면, 테이블에서 데이터가 들어가지 않는 경우에는 NULL을 넣게 된다. 물론, Default로 NULL을 설정하지 않으면 들어가지 않는다. 그래서, 이 NULL이 들어간 컬럼의 데이터를 구분하기 위해 우리는 아래와 같이 쿼리를 사용한다.

 

ACOLUMN IS NULL
ACOLUMN IS NOT NULL

 

위와 같이, 'IS NULL'과 'IS NOT NULL'을 통해 NULL 비교를 한다. 그래서, NULL 체크를 하려는 컬럼에 인덱스를 적용하면 인덱스를 사용할 수 없다. 인덱스의 노드에는 NULL값을 포함하지 않기 때문에, NULL 체크를 하는 컬럼에 아무리 인덱스를 걸어도 인덱스가 적용될 수 없다.

 

그럴 때 사용하는 것이 아래와 같다.

우리가 인덱스를 새로 만들어 주면 된다.

 

CREATE INDEX INDEX01
    ON TEST(NVL2(COLUMN,'Y','N'));

 

위의 쿼리문과 같이, TEST에서 COLUMN이 NULL이라면, Y 아니라면 N이라는 인덱스를 만들어 준다.

그리고, SELECT 문의 쿼리를 짤 때, 아래와 같이 좌항을 조금 변형하여 적용을 하면 된다.

SELECT *
  FROM TEST
 WHERE NVL2(COLUMN, 'Y', 'N') = 'Y'

 

이렇게, 이제 DB에서 NULL이 있을 때 INDEX가 안걸릴 경우에는 이렇게 해결하면 된다.

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기