12. 기타 쿼리 변환

(1) 조인 컬럼에 IS NOT NULL 조건 추가

 
select count(e.empno), count(d.dname)
from   emp e, dept d
where  d.deptno = e.deptno
and    sal <= 2900

조인 컬럼 deptno가 null인 데이터는 조인 액세스가 불필요하다.
필터 조건을 추가해 주면 불필요한 테이블 액세스 및 조인 시도를 줄일 수 있어 쿼리 성능 향상에 도움이 된다.

 
select count(e.empno), count(d.dname)
from   emp e, dept d
where  d.deptno = e.deptno
and    sal <= 2900
and    e.edptno is not null
and    d.deptno is not null

(2) 필터 조건 추가


select * from emp
where  sal between :mn and :mx

바인드 변수 사용자가 :mx보다 :mn 변수에 더 큰 값을 입력한다면 쿼리 결과는 공집합이다.

8i까지는 실재 수행됨
9i부터는 수행을 방지하기 위해 옵티마이저가 임의로 필터 조건식을 추가

(3) 조건절 비교 순서


-----------------------------------------------------------------------------------------
| A | ... |  1  |  1  |  1  |  1  |  1  |  1  |  1  |  1  |  1  |  1  |  1  |  1  |  1  |
-----------------------------------------------------------------------------------------
| B | 000 | 990 | 991 | 992 | 993 | 994 | 995 | 996 | 997 | 998 | 999 | 1000| 1001| ... |
-----------------------------------------------------------------------------------------

위 데이터를 아래 SQL문으로 검색하면 B 컬럼에 대한 조건식을 먼저 평가하는 것이 유리하다.


select * from t
where  A = 1
and    B = 1000;

반대로 A = 1 조건식을 먼저 평가한다면, A 컬럼이 대부분 l이어서 B 컬럼에 대한 비교 연산까지 그만큼 수행해야 하므로 CPU 사용량이 늘어남.

조건절을 처리할 때도 부등호0) 조건을 먼저 평가하느냐 like 조건을 먼저 평가하느냐에 따라 일량에 차이가 생긴다.


select /* + full(도서) */ 도서 번호, 도서 명 , 가격 , 저자I 출판사, isbn
from   도서
where  도서명 > : last_book nm
and    도서명 like :book_nm || '%'

옵티마이저는,테이블 전체를 스캔하거나 인텍스를 수평적으로 스캔할 때의 Filter 조건식을 평가할 때 선택도가 낮은 컬럼을 먼저 처리하도록 순서를 조정한다

옵티마이저 모드


-----------------------------------------------------------------------------------------------------------
| RBO                    | where 절에 기술된 반대 순서로                                                  |
-----------------------------------------------------------------------------------------------------------
| CBO (I/O Costing 모드) | where 절에 기술된 순서대로                                                     |
-----------------------------------------------------------------------------------------------------------
| CBO (CPU Costing 모드) | 비교 연산해야 할 일량을 고려해 옵티마이저가 결정 선택도가 낮은 조건식부터 평가 |
-----------------------------------------------------------------------------------------------------------