by-nc-sa     개발자, DBA가 함께 만들어가는 구루비 지식창고!

1.3. 부분범위처리의 수행속도 향상원리




1.3 부분범위처리의 수행속도 향상원리


SELECT * FROM ORDER;
-무조건으로 데이블의 첫 번째 블록을 스캔한 모든 로우들을 그대로 운반단위로 보내서 바로 추출


SELECT * FROM ORDER
 ORDER BY ITEM;
-오랜 시간이 지나서야 첫 번째 운반단위가 추출됨(전체 테이블을 모두 액세스하여 임시 저장공간에 저장하고 정렬시킨 후 하나의 운반단위를 추출)


SELECT * FROM ORDER
WHERE ITEM > ' ';
-옵티마이져 목표가 'ALL_ROWS'가 아니라면 ITEM인덱스를 사용하는 실행계획을 수립하며 부분범위 처리
-옵티마이져 목표가 'ALL_ROWS'였다면 전체 테이블을 스캔하는 실행계획(정렬순으로 추출되지 않음)


ALL_ROWS일때
SELECT /*+ index( order item_index ) */ *
 FROM ORDER
WHERE ITEM > ' '
-힌트를 사용하여 인덱스를 사용하게 유도

'^^'

가정: ORDER테이블 ORDNO조건을 만족하는 로우가 1000건이 있고, CUSTNO를 만족하는 로우가 10건 각각의 컬럼에는 별도의 인덱스가 생성되어 있음

SELECT *
FROM ORDER
WHERE ordno between 1 and 1000
AND custno like 'DN%';

옵티마이져가 현재 어떤 실행계획을 수립했는가에 상관없이 액세스 형태별로 발생될 수 있는 일량


1) ORDNO인덱스를 사용한 경우
1-1. ORDNO인덱스에서 조건을 만족하는 첫번째 로우를 랜덤으로 찾는다.
1-2. 인덱스에 있는 ROWID를 이용하여 ORDER테이블의 해당 로우를 액세스한다.
1-3. 액세스된 테이블의 로우에 있는 CUSTNO가 'DN'으로 시작하는지를 검증하여 만족하는 로우만 운반단위로 보낸다. 즉, CUSTNO는 인덱스를 사용하지 않고 검증 기능으로만 사용
1-4. ORDNO인덱스의 다음 로우를 액세스하여 1-2~1-3을 반복하여 운반단위가 채워지거나 인덱스의 처리범위가 끝나면 수행을 멈춘다.

결론 :
1000회의 처리를 해야 1000건의 로우들은 거의다 CUSTNO LIKE 'DN%' 조건을 만족하지 못할 것이다. 운반단위를 채울 수가 없어 계속해서 다음건을 수행해야 하며,

최악의 경우 ORDNO의 모든 범위(1000건)를 완료해야만 멈출 수 있다.

해결방법 :
1. ORDNO의 처리범위를 줄인다
2. CUSTNO의 조건이 오히려 넓어진다면 ORDNO인덱스를 경우한 로우들이 훨씬 쉽게 운반단위를 채울 수 있다.

'^^'

가정: ORDER테이블 ORDNO조건을 만족하는 로우가 1000건이 있고, CUSTNO를 만족하는 로우가 10건 각각의 컬럼에는 별도의 인덱스가 생성되어 있음

옵티마이져가 현재 어떤 실행계획을 수립했는가에 상관없이 액세스 형태별로 발생될 수 있는 일량

SELECT *
FROM ORDER
WHERE ordno between 1 and 1000
AND custno like 'DN%';


2) CUSTNO 인덱스를 사용한 경우
2-1. CUSTNO인덱스에서 조건을 만족하는 첫번째 로우를 랜덤으로 찾는다.
2-2. 인덱스에 있는 ROWID를 이용하여 ORDER테이블의 해당 로우를 액세스한다.
2-3. 액세스된 테이블의 로우에 있는 ORDNO가 1과 1000사이에 있는지를 검증하여 만족하는 로우만 운반단위로 보낸다.
즉,ORDNO의 범위는 넓으므로 쉽게 조건을 만족할 수가 있어 운반단위로 보낼 수 있는 확률이 높아지는 것에 유의 하기 바란다.
2-4. CUSTNO인덱스의 다음 로우를 액세스하여 2-1~2-3을 반복하여 운반단위가 채워지거나 인덱스의 처리범위가 끝나면 수행을 멈춘다.

액세스 주관조건의 범위 검증조건의 범위 수행속도 조치사항
좁다 좁다 양호  
좁다 넓다 양호  
넓다 좁다 불량 주관조건과 검증조건 역할 교체
넓다 넓다 양호  

판단기준
WHERE절에 조건을 만족하는 ROW수가 좁다, 넓다에 따라 운반단위가 채워지는 시간으로 판단

문서에 대하여

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

문서정보

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.