문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
study:oracle:datadb:4week_2:chap6 [2010/05/27 13:18] zummaz |
study:oracle:datadb:4week_2:chap6 [2010/05/27 13:26] (현재) zummaz |
||
---|---|---|---|
줄 6: | 줄 6: | ||
*힌트 내에서 정의된 테이블을 전체테이블 스캔 방식으로 유도하는 힌트이다. | *힌트 내에서 정의된 테이블을 전체테이블 스캔 방식으로 유도하는 힌트이다. | ||
- | 예) SELECT /*+ FULL(t) */...... | + | |
FROM big_table t | FROM big_table t | ||
WHERE cre_date >= ' | WHERE cre_date >= ' | ||
줄 12: | 줄 12: | ||
*해쉬 클러스터 테이블을 액세스할 때 해쉬 스캔방식으로 액세스하도록 유도하는 힌트이다. | *해쉬 클러스터 테이블을 액세스할 때 해쉬 스캔방식으로 액세스하도록 유도하는 힌트이다. | ||
- | 예) /*+ HASH(table_name) */ | + | |
===CLUSTER=== | ===CLUSTER=== | ||
*클러스터링 테이블을 액세스할 때 클러스터 인덱스를 통해 스캔하도록 유도하는 힌트이다. | *클러스터링 테이블을 액세스할 때 클러스터 인덱스를 통해 스캔하도록 유도하는 힌트이다. | ||
- | 예) /*+ CLUSTER(table_name) */ | + | |
===INDEX=== | ===INDEX=== | ||
*인덱스 범위 스캔에의한 테이블 액세스를 유도하는 힌트이다. | *인덱스 범위 스캔에의한 테이블 액세스를 유도하는 힌트이다. | ||
줄 27: | 줄 27: | ||
FROM cust_v | FROM cust_v | ||
WHERE cust_name = ' | WHERE cust_name = ' | ||
+ | |||
- | 여기서 cust_v는 cust테이블 액세스를 포함하고 있는 View이름이며, | + | \\ 여기서 cust_v는 cust테이블 액세스를 포함하고 있는 View이름이며, |
===NO_INDEX=== | ===NO_INDEX=== | ||
옵티마이져가 실행계획을 수립할 때 지정한 인덱스는 제외하고, | 옵티마이져가 실행계획을 수립할 때 지정한 인덱스는 제외하고, | ||
줄 35: | 줄 36: | ||
FROM member m | FROM member m | ||
WHERE member_id > 10200; | WHERE member_id > 10200; | ||
+ | \\ | ||
*여기에 지정한 인덱스를 제외한 나머지 인덱스들을 액세스 수단으로 고려한다. 그러나 만약 인덱스를 지정하지 않고 테이블만 정의하면 해당 테이블의 모든 인덱스을 힌트 내에 정의한 것으로 인정하여 모든 인덱스를 고려 대상에서 제외한다. | *여기에 지정한 인덱스를 제외한 나머지 인덱스들을 액세스 수단으로 고려한다. 그러나 만약 인덱스를 지정하지 않고 테이블만 정의하면 해당 테이블의 모든 인덱스을 힌트 내에 정의한 것으로 인정하여 모든 인덱스를 고려 대상에서 제외한다. | ||
*동일한 인덱스를 NO_INDEX힌트와 함께 INDEX, INDEX_ASC, INDEX_DESC, INDEX_COMBINE, | *동일한 인덱스를 NO_INDEX힌트와 함께 INDEX, INDEX_ASC, INDEX_DESC, INDEX_COMBINE, | ||
줄 48: | 줄 50: | ||
*인덱스르 경유하여 테이블을 액세스할때 힌트에 지정한 인덱스를 인덱스 컬럼값의 내림차순(역순)으로 범위 스캔하도록 유도하는 힌트 | *인덱스르 경유하여 테이블을 액세스할때 힌트에 지정한 인덱스를 인덱스 컬럼값의 내림차순(역순)으로 범위 스캔하도록 유도하는 힌트 | ||
- | 예) SELECT /*+ INDEX_DESC(a idx01) */........ | + | |
FROM tab1 a | FROM tab1 a | ||
WHERE col1 LIKE ' | WHERE col1 LIKE ' | ||
줄 55: | 줄 57: | ||
*INDEX_COMBINE 힌트에서 테이블 이름만 부여하고 인덱스 이름을 명시하지 않으면 옵티마이져가 해당 테이블에서 가장 적합한 인덱스를 선택하여 처리한다. | *INDEX_COMBINE 힌트에서 테이블 이름만 부여하고 인덱스 이름을 명시하지 않으면 옵티마이져가 해당 테이블에서 가장 적합한 인덱스를 선택하여 처리한다. | ||
- | 예) SELECT /*+ INDEX_COMBINE(e sal_bix hiredate_bix) */..... | + | |
FROM emp e | FROM emp e | ||
WHERE sal > 3000 AND hiredate < ' | WHERE sal > 3000 AND hiredate < ' | ||
===INDEX_FFS=== | ===INDEX_FFS=== | ||
*전체 테이블을 스캔하는 것과 유사한 방법으로 인덱스 전체범위를 스캔하는 방식으로 유도하는 힌트이다. 비록 인덱스를 스캔하지만 다중블록을 스캔한다. | *전체 테이블을 스캔하는 것과 유사한 방법으로 인덱스 전체범위를 스캔하는 방식으로 유도하는 힌트이다. 비록 인덱스를 스캔하지만 다중블록을 스캔한다. | ||
+ | \\ | ||
+ | 예) SELECT /*+ INDEX_FFS(table_name index_name) */...... | ||
+ | |||
- | 예) SELECT /*+ INDEX_FFS(table_name index_name) */...... | ||
이와 반대로 NO_INDEX_FFS 힌트에서 지정한 테이블의 인덱스에대해 ' | 이와 반대로 NO_INDEX_FFS 힌트에서 지정한 테이블의 인덱스에대해 ' | ||
===INDEX_JOIN=== | ===INDEX_JOIN=== | ||
*2개 이상의 인덱스들만으로 조인을 수행하도록 유도하는 힌트이다. | *2개 이상의 인덱스들만으로 조인을 수행하도록 유도하는 힌트이다. | ||
- | *이 때 인덱스를 구성하는 컬럼이 해당 질의에서 필요로 하는 모든 컬럼을 포함하고 있어야 한다. | + | *이 때 인덱스를 구성하는 컬럼이 해당 질의에서 필요로 하는 모든 컬럼을 포함하고 있어야 한다. 즉, 테이블을 전혀 액세스하지 않고 인덱스들만으로 쿼리를 처리할수 있어야 한다. |
- | 즉, 테이블을 전혀 액세스하지 않고 인덱스들만으로 쿼리를 처리할수 있어야 한다. | + | *인덱스 조인은 2개 이상의 인덱스를 범위 스캔한 결과를 ROWID로 해쉬 조인을 수행하여 결과를 얻는다. |
- | 인덱스 조인은 2개 이상의 인덱스를 범위 스캔한 결과를 ROWID로 해쉬 조인을 수행하여 결과를 얻는다. | + | |
- | 예) SELECT /*+ INDEX_JOIN(e SAL_BMP HIREDATE_IX) */ sal, hiredate | + | |
FROM emp e | FROM emp e | ||
WHERE hiredate < sysdate AND sal > 2000; | WHERE hiredate < sysdate AND sal > 2000; | ||
줄 76: | 줄 79: | ||
*인덱스 스킵 스캔 방식으로 인덱스를 액세스하도록 유도하는 힌트이다. | *인덱스 스킵 스캔 방식으로 인덱스를 액세스하도록 유도하는 힌트이다. | ||
- | 예) SELECT /*+ INDEX_SS(e emp_idx) */.... | + | |
FROM emp e | FROM emp e | ||
WHERE hiredate = sysdate | WHERE hiredate = sysdate | ||
+ | |||
이와 반대로 NO_INDEX_SS 힌트는 힌트에서 지정한 테이블의 인덱스에 대해 스킵스캔을 제외한 다른 액세스 방법을 사용하도록 유도한다. | 이와 반대로 NO_INDEX_SS 힌트는 힌트에서 지정한 테이블의 인덱스에 대해 스킵스캔을 제외한 다른 액세스 방법을 사용하도록 유도한다. | ||
줄 87: | 줄 91: | ||
*인덱스 스킵 스캔방식으로 범위 스캔하는 경우 내림차순으로 인덱스를 읽도록 하는 힌트이다. | *인덱스 스킵 스캔방식으로 범위 스캔하는 경우 내림차순으로 인덱스를 읽도록 하는 힌트이다. | ||
- | 예) SELECT /*+ INDEX_SS_DESC(e ename_ix) */........ | + | |
FROM employees e | FROM employees e | ||
WHERE first_name = ' | WHERE first_name = ' |