새로쓴 대용량 데이터베이스솔루션 1 (2011년)
부분범위처리의 적용원칙 0 0 65,720

by 구루비스터디 부분범위처리 Partial Range Scan [2013.09.11]


부분범위처리의 적용원칙

부분범위 처리의 자격

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


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 부분범위처리를 한다.
(중복을 확인할 필요가 없다)




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


옵티마이져 모드에 따라 차이가 날 수 있음
  • 규칙기준이나, 비용기준 : 'FIREST_ROWS'로 지정되어 있는 경우에는 대개의 경우 부분범위 처리
  • 비용기준 : 'ALL_ROWS'로 지정되어 있다면 전체범위 처리를 하는 경우가 자주 발생
"구루비 데이터베이스 스터디모임" 에서 2011년에 "새로쓴 대용량 데이터베이스 솔루션1" 도서를 스터디하면서 정리한 내용 입니다.

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

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

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

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