Oacle 최적화: IS NULL 의 최적화 와 IS NOT NULL 의 최적화

5717 단어 데이터 뱅 크
IS NULL 최적화
최적화 방법: nvl (필드 i, j) 을 통 해 필드 i 에서 빈 데 이 터 를 j 로 전환 시 켜 색인 을 정상적으로 사용 합 니 다. 구체 적 으로 조건 i is null 을 j = nvl (i, j) 로 전환 합 니 다.데이터 양 이 많 을 때 전환 is null 은 Oacle 버 전에 서 뚜렷하게 향상 되 었 습 니 다. 주의: 사용 할 때 필드 i 의 데이터 가 j 를 포함 하지 않도록 해 야 합 니 다!결함: 필드 i 는 j 값 의 데 이 터 를 가 질 수 없습니다. 다른 방법 은 null 을 색인 에 포함 시 키 는 것 입 니 다.
함수 소개: nvl (a, b, c,...) a 가 비어 있 을 때 b 를 취하 고 b 가 비어 있 을 때 c 를 취하 여 유추 합 니 다.
최적화 예시
--  nvl     (      ,  )
select*from tab_i t where 1=nvl(t.col_x,1);
-- t.col_x     1       
--select*from tab_i t where t.col_x is null;
--       
create index idx_col_x on tab_i(decode(col_x,null,1));
select*from tab_i t where decode(t.col_x,null,1)=1;

IS NOT NULL 최적화
최적화 방법 결과 집합 은 j = nvl (i, j) 을 포함 하지 않 으 면 되 고 방식 이 다양 합 니 다. 일반적인 상황 에서 not exists 를 사용 하거나 크기 를 비교 할 수 있 습 니 다. 이 두 가지 효율 은 보통 비교 길이 보다 높 습 니 다.
최적화 예시
  • not exists
  • select*from tab_i t where not exists 
    (select 1 form tab_i i where 1=nvl(i.col_x,1));
    --11g   not in not exists    ,    not in
    -- t.col_x     1       
    --select*from tab_i t where t.col_x is not null;
    

    크기 비교
    -- t.col_x     1    
    select*from tab_i t where 1<nvl(t.col_x,1);
    -- t.col_x     1    
    select*from tab_i t where 1>nvl(t.col_x,1);
    --      ,    IS NOT NULL
    select*from tab_i t where t.col_x>1;
    

    길이
    -- t.col_x       1 
    select*from tab_i t where 2<=length(nvl(t.col_x,1));
    --  length        ,     ,        length  
    

    좋은 웹페이지 즐겨찾기