실행계획 SQL 연산(INDEX RANGE SCAN)
WHERE절에 인덱스 구성 컬럼이 ‘<’ or ‘>’와 같이 범위 제한 연산자에 의해 이용되거나 BETWEEN or LIKE와 같은 조건 절에 이용될 때 INDEX RANGE SCAN을 하게 됩니다. 만약 결합 인데스라면 범위 제한자에 사용되는 컬럼은 인덱스 구성 컬럼 중 선두 컬럼 이여야 하며 조건을 만족하는 첫번째 레코드를 인덱스 블록에서 추출 후 조건에 맞는 데이터가 나올 때 까지 계속 스캔하는 나가는 방식 입니다.
아래 예에서 EMP TABLE에는 sal에 대해 인덱스가 구성되어 있다고 가정을 합니다.
SQL>SELECT ENAME, SAL
FROM EMP
WHERE SAL > 1000;
Execution Plan
--------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (BY INDEX ROWID) OF ‘EMP’
2 1 INDEX (RANGE SCAN) OF ‘idx_emp_sal’ (NON-UNIQUE)
참고로 위와 같이 인덱스를 경유하여 나온 데이터는 SAL에 위해 오름차순으로 정렬되어 있음을 확인 할 수 있습니다. 특정 컬럼에 대해 인덱스가 구성되어 있다면 인덱스 생성할 때 그 컬럼 값에 대해 오름차순으로 정렬된 모양으로 인덱스가 구성되므로 인덱스를 경유하게 되면 자동으로 오름차순 형태의 데이터가 추출되게 됩니다.
그러나 INDEX_FFS 같은 힌트를 사용하여 INDEX FULL SCAN을 통해 얻어진 결과에 대해서는 정렬되지 않은 결과를 보여줄 수도 있으니 주의해야 합니다. 또한 INDEX FULL SCAN시 일반적인 인덱스 스캔에서의 단일 블록 스캔이 아닌 Multi Block Scan을 하게 되며 병렬로 인덱스 스캔이 일어날 수도 있습니다.
'프로그래밍 > oracle' 카테고리의 다른 글
oracle - 실행계획 SQL연산(INLIST ITERATOR) (0) | 2012.08.17 |
---|---|
oracle - 실행계획 SQL연산(INDEX RANGE SCAN DESCENDING, INDEX UNIQUE SCAN) (0) | 2012.08.17 |
oracle - 실행계획 SQL 연산(HASH SEMI-JOIN) (0) | 2012.08.17 |
oracle - 실행계획 SQL 연산(HASH JOIN) (0) | 2012.08.17 |
oracle - 실행계획 SQL 연산(HASH ANTI-JOIN) (0) | 2012.08.17 |