** 부정형 비교
** {code:sql}
select *
from 고객
where 직업 <> '학생'
* 인덱스 사용이 불가능한 경우
** is null 조건만으로 검색할 때
** {code:sql}
select *
from 사원
where 연락처 is null
NO | 인덱스 컬럼 가공 사례 | 튜닝 방안 | |
---|---|---|---|
1 | select * from 업체 where substr(업체명,1,2) = '대한' | select * from 업체 where 업체명 like '대한%' | |
2 | select * from 사원 where 월급여 * 12 = 36000000 | select * from 사원 where 월급여 = 36000000/12 | |
3 | select * from 주문 where to_char(일시,'yyyymmdd') = :dt | select * from 주문 where 일시 >= to_date(:dt,'yyyymmdd') and 일시 < to_date(:dt,'yyyymmdd') + 1 | |
4 | select * from 고객 where 연령||직업 ='30공무원' | select * from 고객 where 연령=30 and 직업 ='공무원' | |
5 | select * from 회원사지점 where 회원번호||지점번호 = :str | select * from 회원사지점 where 회원번호 = substr(:str,1,2) and 지점번호 = substr(:str,1,2) | |
6 | select * from 주문 where nvl(주문수량,0) >= 100 | 주문수량이 100보다 크거나 같을 때 값을 가져오는 경우이므로 주문수량이 null인 경우는 해당 되지 않으므로 "0"으로 치환 할 필요 없음 select * from 주문 where 주문수량 >= 100 | |
7 | select * from 주문 where nvl(주문수량,0) < 100 | ① 1단계 : 주문수량 컬럼이 not null 여부 확인(not null일 경우 : null 치환 함수 제거) ② 2단계 : 해당건수가 많지 않다면 FBI 사용 고려(Table Full Scan이 불가피하므로) | |
8 | 조건절의 컬럼이 가공되어 full table scan을 탐 {code} where 거래일자 between :startDd and :endDd and 지수구분코드 | 지수업종코드 in (('1001'),('2003')) group by 거래일자 {code} | In-List로 처리해서 PK 인덱스를 사용 {code} where 거래일자 between :startDd and :endDd and (지수구분코드, 지수업종코드) in (('1','001'),('2','003')) group by 거래일자{code} |