1.2 부분범위처리의 적용원칙

1.2.1 부분범위 처리의 자격

-논리적으로도 어쩔 수 없는 경우만 아니라면 언제나 부분범위 처리를 할 수 있다



SELECT SUM(ORDQTY)
  FROM ORDER
WHERE ORD_DATE LIKE '200512%';

SELECT ORD_DEPT, COUNT(*)
 FROM ORDER
WHERE ORD_DATE LIKE '200512%'
GROUP BY ORD_DEPT;

분석 : SELECT-LIST나 HAVING절에 그룹함수를 사용하였다면 부분범위 처리를 할 수 없다. 




SELECT ORD_DATE, ORDQTY * 1000
  FROM ORDER
WHERE ORD_DATE LIKE '200512%'
ORDER BY ORD_DATE;

분석 : ORDER BY가 사용되었다면 마찬가지로 전체범위를 처리할 수 밖에 없다. Driving역할을 하는 인덱스와 ORDER BY에 사용된 컬럼이 동일하다면 비록 ORDER BY를 사용하였더라도 부분범위로 처리 가능
  (인덱스로 처리하여 바로 리턴하는 부분범위 처리방식으로 실행계획을 수립하게 됨)




SELECT DEPTNO, EMPNO
 FROM EMP1
WHERE SAL > 1000000
UNION
SELECT DEPTNO, EMPNO
  FROM EMP2
WHERE HIREDATE BETWEEN '01-JAN-2005' AND SYSDATE;



분석 :
UNION, MINUS, INTERSECT를 사용한 SQL은 부분범위로 처리할 수 없다.
(집합연산은 그 결과가 반드시 유일해야하기 때문)

UNION ALL 부분범위처리를 한다.
(중복을 확인할 필요가 없다)



1.2.2 옵티마이져 모드에 따른 부분범위처리

옵티마이져 모드에 따라 차이가 날 수 있음
  • 규칙기준이나, 비용기준 : 'FIREST_ROWS'로 지정되어 있는 경우에는 대개의 경우 부분범위 처리
  • 비용기준 : 'ALL_ROWS'로 지정되어 있다면 전체범위 처리를 하는 경우가 자주 발생

문서에 대하여

  • 최초작성자 : 이창헌
  • 최초작성일 : 2011년 7월 30일
  • 수정작성일 : 2011년 7월 30일
  • 이 문서는 오라클클럽 대용량 데이터베이스 스터디 모임에서 작성하였습니다.
  • {*}이 문서의 내용은 (주)엔코아컨설팅에서 출간한 '새로 쓴, 대용량 데이터 베이스 솔루션'을 참고하였습니다.*