오라클 성능 고도화 원리와 해법 II (2016년)
기타 쿼리 변환 0 0 3,001

by 구루비 쿼리변환 ordered_predicates [2017.05.25]


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 모드) | 비교 연산해야 할 일량을 고려해 옵티마이저가 결정 선택도가 낮은 조건식부터 평가 |
-----------------------------------------------------------------------------------------------------------

"구루비 주주클럽 스터디모임" 에서 2016년에 "오라클 성능 고도화 원리와 해법 II " 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3368

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입