사용자 도구

사이트 도구


study:oracle:datadb:4week_2:chap6

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
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) */......+  예) SELECT /*+ FULL(t) */......
        FROM big_table t        FROM big_table t
        WHERE cre_date >= '20050101';        WHERE cre_date >= '20050101';
줄 12: 줄 12:
   *해쉬 클러스터 테이블을 액세스할 때 해쉬 스캔방식으로 액세스하도록 유도하는 힌트이다.   *해쉬 클러스터 테이블을 액세스할 때 해쉬 스캔방식으로 액세스하도록 유도하는 힌트이다.
  
- 예) /*+ HASH(table_name) */+  예) /*+ HASH(table_name) */
 ===CLUSTER===  ===CLUSTER=== 
   *클러스터링 테이블을 액세스할 때 클러스터 인덱스를 통해 스캔하도록 유도하는 힌트이다.   *클러스터링 테이블을 액세스할 때 클러스터 인덱스를 통해 스캔하도록 유도하는 힌트이다.
  
- 예) /*+ CLUSTER(table_name) */+  예) /*+ CLUSTER(table_name) */
 ===INDEX=== ===INDEX===
   *인덱스 범위 스캔에의한 테이블 액세스를 유도하는 힌트이다.    *인덱스 범위 스캔에의한 테이블 액세스를 유도하는 힌트이다. 
줄 27: 줄 27:
      FROM cust_v      FROM cust_v
      WHERE cust_name = 'TOMCAT';      WHERE cust_name = 'TOMCAT';
 +     
      
-     여기서 cust_v는 cust테이블 액세스를 포함하고 있는 View이름이며, cname_idx는 cust 테이블의 cust_name컬럼에 대해 정의된 인덱스임.+\\     여기서 cust_v는 cust테이블 액세스를 포함하고 있는 View이름이며, cname_idx는 cust 테이블의 cust_name컬럼에 대해 정의된 인덱스임.
 ===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, INDEX_FFS등에 사용하면 옵티마이져는 두 힌트 모두를 무시한다.   *동일한 인덱스를 NO_INDEX힌트와 함께 INDEX, INDEX_ASC, INDEX_DESC, INDEX_COMBINE, INDEX_FFS등에 사용하면 옵티마이져는 두 힌트 모두를 무시한다.
줄 48: 줄 50:
   *인덱스르 경유하여 테이블을 액세스할때 힌트에 지정한 인덱스를 인덱스 컬럼값의 내림차순(역순)으로 범위 스캔하도록 유도하는 힌트   *인덱스르 경유하여 테이블을 액세스할때 힌트에 지정한 인덱스를 인덱스 컬럼값의 내림차순(역순)으로 범위 스캔하도록 유도하는 힌트
  
- 예) SELECT /*+ INDEX_DESC(a idx01) */........+  예) SELECT /*+ INDEX_DESC(a idx01) */........
        FROM tab1 a        FROM tab1 a
        WHERE col1 LIKE 'ABC%';        WHERE col1 LIKE 'ABC%';
줄 55: 줄 57:
   *INDEX_COMBINE 힌트에서 테이블 이름만 부여하고 인덱스 이름을 명시하지 않으면 옵티마이져가 해당 테이블에서 가장 적합한 인덱스를 선택하여 처리한다.   *INDEX_COMBINE 힌트에서 테이블 이름만 부여하고 인덱스 이름을 명시하지 않으면 옵티마이져가 해당 테이블에서 가장 적합한 인덱스를 선택하여 처리한다.
  
- 예) SELECT /*+ INDEX_COMBINE(e sal_bix hiredate_bix) */.....+  예) SELECT /*+ INDEX_COMBINE(e sal_bix hiredate_bix) */.....
        FROM emp e        FROM emp e
        WHERE sal > 3000 AND hiredate < '20050715';        WHERE sal > 3000 AND hiredate < '20050715';
 ===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+  예) 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) */....+  예) 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) */........+  예) SELECT /*+ INDEX_SS_DESC(e ename_ix) */........
        FROM employees e        FROM employees e
        WHERE first_name = 'Steven';        WHERE first_name = 'Steven';
study/oracle/datadb/4week_2/chap6.1274933924.txt.gz · 마지막으로 수정됨: 2010/05/27 13:18 저자 zummaz