실행계획 SQL연산
(INDEX RANGE SCAN DESCENDING,
INDEX UNIQUE SCAN)
구로디지털 오엔제이프로그래밍실무교육센터
인덱스
영역에서 데이터를 찾은 후 역순으로 인덱스 블록을 Scan 하므로 당연히 데이터는 역순으로 정렬되어
있습니다. 흔히 이렇게 역순으로 출력하기 위해(인덱스가
있음에도 불구하고) ORDER BY를 사용하기도 하는데 아래의 예를 잘 보시고 이 방법을 이용하도록
하자구요~
SQL> SELECT
ENAME,
SAL
FROM EMP E
WHERE SAL > 0;
Execution Plan
--------------------------------------------------------------------
0
SELECT STATEMENT
Optimizer=CHOOSE
1
0 TABLE ACCESS (BY
INDEX ROWID) OF ‘EMP’
2
1 INDEX (RANGE
SCAN DESCENDING) OF ‘idx_emp_sal’
(NON-UNIQUE)
위에서
보인 INDEX_DESC는 오라클의 힌트 구문으로 idx_emp_sal
인덱스에서 역순으로 SCAN 하라는 의미를 가집니다.
아래와 같은
방법은 좋은 방법이 아닙니다. 위의 SQL 문장과 비교하여
보세요~
SQL> SELECT ENAME,
SAL
FROM EMP E
ORDER BY SAL DESC;
한편 INDEX UNIQUE SCAN은
Unique한 인덱스에서 Unique한 값을 추출하는 연산인데 하나의 ROW를 추출하는데 있어 가장 좋은 방법입니다.
아래는 Primary Key 생성시 만들어진 Unique
인덱스를 이용하여 로우를 추출하는 예입니다.
SQL> SELECT ENAME,
SAL
FROM EMP E
WHERE EMonO =1004;
Execution Plan
--------------------------------------------------------------------
0
SELECT STATEMENT
Optimizer=CHOOSE
1
0 TABLE ACCESS (BY
INDEX ROWID) OF ‘EMP’
2
1 INDEX (UNIQUE
SCAN) OF ‘pk_emp’
(UNIQUE)
댓글 없음:
댓글 쓰기