by 구루비 ALL_ROWS CHOOSE FIRST_ROWS RULE INDEX_ASC INDEX_DESC INDEX_FFS [2002.04.02]
아래 강좌는 Oracle8i 버전을 기준으로 작성 되었습니다. Hint에 대한 더 많은 정보는 오라클클럽 위키의 문서를 참고해 주시기 바랍니다.
ALL_ROWS는 Full Table Scan을 선호하며 CBO(Cost Based Optimization)는 default로 ALL_ROWS를 선택 합니다.
SQL> SELECT /*+ ALL_ROWS */ ename, hiredate FROM emp WHERE ename like '%%%'; Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=HINT: ALL_ROWS (Cost=1 Card=5 Bytes=80) 1 0 TABLE ACCESS (FULL) OF 'EMP' (Cost=1 Card=5 Bytes=80)
Hint Level의 CHOOSE는 RBO(Rule Based Optimization)인지 CBO(Cost Based Optimization) 인지를 선택 합니다. 만약 주어진 table의 통계 정보가 없다면 Rule Based 접근 방식을 사용 합니다.
Full Table Scan보다는 index scan을 선호하며 Interactive Application인 경우 best response time을 제공 합니다. 또한 sort merge join보다는 nested loop join을 선호 합니다.
SQL> SELECT /*+ FIRST_ROWS */ ename FROM emp WHERE empno=7876; Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=HINT: FIRST_ROWS (Cost=1 Card=1 Bytes=20) 1 0 TABLE ACCESS (BY INDEX ROWID) OF 'EMP' (Cost=1 Card=1 Bytes=20) 2 1 INDEX (RANGE SCAN) OF 'PK_EMP' (UNIQUE) (Cost=1 Card=1)
Rule Based 접근 방식을 사용하도록 지정 합니다.
Cluster Scan을 선택하도록 지정한다. 따라서 clustered object들에만 적용 됩니다.
Table을 Full Scan하길 원할 때 사용 합니다.
Hash scan을 선택하도록 지정한다. 이 hint는 HASHKEYS parameter를 가지고 만들어진 cluster내에 저장된 table에만 적용이 됩니다.
지정된 index를 강제적으로 쓰게끔 지정 합니다.
지정된 index를 오름차순으로 쓰게끔 지정 합니다. Default로 Index Scan은 오름차순 입니다
지정된 index를 내림차순으로 쓰게끔 지정 합니다.
아래 예제는 제일 큰 것 하나만 조회되므로, max 함수의 기능을 대신할 수 있습니다.
SQL> SELECT /*+ index_desc(emp pk_emp) */ empno FROM emp WHERE rownum = 1 ;
Full table scan보다 빠른 Full index scan을 유도 합니다.
From절에 기술된 테이블 순서대로 join이 일어나도록 유도 합니다.
각 테이블간 HASH JOIN이 일어나도록 유도 합니다.
지정된 테이블들의 조인이 SORT-MERGE형식으로 일어나도록 유도 합니다.
NOPARALLEL hint를 사용하면, parallel query option을 사용하지 않도록 할 수 있다.
PARALLEL hint를 사용하면 query에 포함된 table의 degree를 설정할 수 있습니다.
예를 들어, 다음과 같이 hint를 적어 degree 4로 parallel query option을 실행하도록 할 수 있습니다. 이 때 parallel이란 글자와 괄호( '(' )사이에 blank를 넣지 않도록 주의해야 합니다.
SQL> SELECT /*+ PARALLEL(emp, 4) */ * FROM emp;
Parallel Query에서 degree란 하나의 operation 수행에 대한 server process의 개수 입니다. 이러한 degree 결정에 영향을 주는 요인들에는 다음과 같은 것들이 있습니다.
한 사용자만이 parallel query를 사용하는 경우, sorting이 많이 필요한 작업과 같은 CPU-bound 작업의 경우는 CPU 갯수의 1 ~ 2배의 degree가 적당하며, sorting보다는 table scan과 같은 I/O bound 작업의 경우는 disk drive 갯수의 1 ~ 2배가 적당합니다.
동시에 수행되는 parallel query가 많은 경우에는 위의 각 사용자의 degree를 줄이거나 동시에 사용하는 사용자 수를 줄여야 합니다.
- 강좌 URL : http://www.gurubee.net/lecture/1260
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.