문서의 이전 판입니다!
예) SQL>CREATE TABLE table1( code number(7), name varchar(20),...) parallel 20; SQL>CREATE INDEX table1_index on table1(code) parallel 20;
: 모든 DML 실행시 Parallel 힌트 사용여부나 PARALLEL 구문의 사용 여부에 개의치 않고 무조건 병렬처리됨
* 한 번 지정한 병렬도는 내부적으로 GROUP BY나 정렬처리 등의 단위작업에도 재차 적용될수 있다. 만약 **__병렬처리에 어떤 제한 요소__**가 발생하게 되면 이 힌트는 무시된다. * 참고사항 : 보통 많은 책들에서 Update, Delete 시에 Partition TABLE이 아닌경우 PARALLEL 수행이 안된다고 하는데 실레로 10g에서 PARALLEL 수행이 된다고함 (관련링크 : http://scidb.tistory.com/6)
예) SELECT /*+ FULL(sales) PARALLEL(sales) */ SUBSTR(sale_dt,1,6), SUM(qty) FROM sales WHERE sale_dt BETWEEN '20030101' AND '20051231' GROUP BY SUBSTR(sale_dt,1,6); SELECT /*+ FULL(sales) PARALLEL(sales, 8) */ SUBSTR(sale_dt,1,6), SUM(qty) FROM sales WHERE sale_dt BETWEEN '20030101' AND '20051231' GROUP BY SUBSTR(sale_dt,1,6);
예) SELECT /*+ NOPARALLEL(m) */ member_name FROM member m;
병렬 조인의 속도를 향상시키기 위해 슬레이브 프로세스 - 생산자(Producer)와 소비자(Consumer)프로세스 - 사이에서 조인할 테이블의 로우를 서로 주고 받는 할당작업(Distrubution)을 하는 방법을 정의 하는 힌트이다.
표현 방식: /*+ PQ_DISTRIBUTE(table, outer_distribution,inner_distribution) */
- inner_distribution: 내측 테이블에 대한 할당 방법을 기술
* HASH: 조인 키 컬럼에 대해 해쉬 함수를 수행한 결과값을 이용하여 소비자 프로세스에 로우들을 할당
* BROADCAST: 외측 테이블에 전체 로우를 모든 Consumer 프로세스로 보냄 * PARTITON: 상대편 조인 대사 테이블이 조인 키 컬럼으로 파티션되어 있는 경우 파티션 키 값을 이용하여 로우들을 Consumer프로세스에 할당 * NONE: 조인 대상 로우들을 랜덤하게 파티셔닝함
예) SELECT /*+ ORDERED PQ_DISTRIBUTE(b HASH,HASH) USE_HASH(b) */..... FROM TAB1 a, TAB2 b WHERE a.col1 = b.col2; SELECT /*+ PQ_DISTRIBUTE(b BROADCAST, NONE) USE_HASH(b) */.......... FROM TAB1 a, TAB2 b WHERE a.col1 = b.col2;
파티션 인덱스(Partitioned Index)에 대한 인덱스 범위 스캔을 병렬로 수행하기 위한 병렬도를 지정하는 힌트이다.
예) SELECT /*+ PARALLEL_INDEX(table1, index1, 3) */..........
인덱스 생성(Create)이나 변경(Alter)에 의해 PARALLEL 파라메터가 적용되어 있는 경우 SQL에서 이 힌트를 적용하면 옵티마이져는 해당 인덱스에 대한 PARALLEL 파라메터를 무시하여 범위스캔을 하지 않게 된다.
예) SELECT /*+ NOPARALLEL_INDEX(m mem_join_idx) */.... FROM members m WHERE join_date BETWEEN '20040101' AND '20051231';
NOPARALLEL_INDEX힌트는 버전에 따라 NO_PARALLEL_INDEX힌트로 대체되어 사용되기도 한다.
Oracle버전별 NOPARALLEL_INDEX Hint
[Oracle9iR2] (NOPARALLEL_INDEX) [Oracle10gR2],11gR1 (NO_PARALLEL_INDEX)