잊지 않겠습니다.

'SQL'에 해당되는 글 1건

  1. 2009.12.22 Query Index의 사용
1. 인덱스 컬럼절의 변형

 

select ename from emp where sal * 2.1 > 950 (X)

select ename from emp where sal > 950/2.1   (O)

 

select ename from emp where to_char(hiredate, 'DDMMYY') = '250884'   (X)

select ename from emp where hiredate = to_date('250884', 'DDMMYY')    (O)

 

=> 인덱스 컬럼에 변형을 가하면 사용할수 없다. 단 변형가능 하더라도 쓰고 싶다면 쓸수야 있지만..

    create index .... on emp to_char(hiredate, 'DDMMYY') ....이렇게 해야할까.ㅋ;;

 

2. 내부적인 데이터변환

 

select * from emp where hiredate = '14-JAN-85' (X)

select * from emp hiredate = to_date('71-10-22', 'YY/DD/MM')   (O)

 

select * from emp where empno = '7936' (X)

select * from emp where empno = to_numer('7936')                   (O)

 

=> 내부적인 데이터변환에서 가장 많이 실수하는 부분은 문자값 데이터타입을 갖는 컬럼에 '값'->값 으로 하는

     유형이랄까... 딱 맞는 데이터타입을 사용해야만 함!!

 

3. NULL 조건의 사용

 

select ename from emp where comm is null          (X)

select ename from emp where comm is not null    (X)

 

select ename from emp where ename > ''            (O)

select ename from emp where comm >= 0            (O)

 

=> NULL 조건으로 검색한다는 가정하에는 거의 인덱스 풀 스캔이 일어남.적절히 사용할것!!

 

4. 부정형 조건의 사용

 

select ename from emp where deptno != 30 (X)

select ename from emp wehre deptno < 30 and deptno > 30      (O)

 

=> 논리적으로 부정형을 이용하여 인덱스를 사용하겠다는것은 말이 안됨.

5. Like 연산자 사용

 

select * from emp where ename like 'S%'         (O)

select * from emp where ename like '%S%'      (X)

 

=> %S% 부분을 꼭 쓰고 싶다면 이런식으로 하는것이...다 넣는거다.ㅋ

    AS%, BS%, ..... 본문찾기 기능은 없어지는 추세.

 

6. 최적기가 판단

 

RBO경우 무조건 탄다. CBO는 통계값을 기준으로 하기 때문에 DBA가 잘해야지..HINT를 적절히..

 

 

기타. 인덱스를 이용한 sort 회피 방법

 

select empno, ename, job, comm from emp order by empno             (정렬)

select empno, ename, job, comm from emp where empno >= 0         (정렬제거)

 

Index를 사용하지 않고 개발을 하는 경우가 많은데, 이 부분에 대한 고려는 항시 필요하다. 언제나 이런 내용까지 같이 고민을 하는 개발자가 될 수 있을지... 참 길이 멀고도 험한것 같다.
저작자 표시 비영리 변경 금지
신고
Posted by xyzlast Y2K
TAG ,


티스토리 툴바