조인되는 두 테이블간의 파티션의 구성, 데이터 크기에 따라 병렬 조인을 수행하는 옵티마이져의 선택이 달라질 수 있다. 이 때 사용자가 직접 조인을 위한 데이터 분배 방식을 결정 할 수 있는 힌트이다.
SQL> SELECT /*+ ordered use_merge(e) parallel(d 4) parallel(e 4)
2 pq_distribute(e hash hash) */*
3 FROM dept d
4 , emp e
5 WHERE e.deptno = d.deptno;
--------------------------------------------------------------------------
| Id | Operation | Name | TQ |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | |
| 1 | PX COORDINATOR | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10002 | Q1,02 | P->S | QC (RAND) |
| 3 | MERGE JOIN | | Q1,02 | PCWP | |
| 4 | SORT JOIN | | Q1,02 | PCWP | |
| 5 | PX RECEIVE | | Q1,02 | PCWP | |
| 6 | PX SEND HASH | :TQ10000 | Q1,00 | P->P | HASH |
| 7 | PX BLOCK ITERATOR | | Q1,00 | PCWC | |
| 8 | TABLE ACCESS FULL| DEPT | Q1,00 | PCWP | |
|* 9 | SORT JOIN | | Q1,02 | PCWP | |
| 10 | PX RECEIVE | | Q1,02 | PCWP | |
| 11 | PX SEND HASH | :TQ10001 | Q1,01 | P->P | HASH |
| 12 | PX BLOCK ITERATOR | | Q1,01 | PCWC | |
| 13 | TABLE ACCESS FULL| EMP | Q1,01 | PCWP | |
--------------------------------------------------------------------------
SQL> SELECT /*+ ordered
2 use_hash(b) use_nl(c) use_merge(d)
3 full(a) full(b) full(c) full(d)
4 parallel(e, 16) parallel(b, 16) parallel(c, 16) parallel(d, 16)
5 pq_distribute(b, none, partition)
6 pq_distribute(c, none, broadcast)
7 pq_distribute(d, none, hash) */*
8 FROM 상품기본이력임시 a
9 , 상품 b
10 , 코드상세 c
11 , 상품상세 d
12 WHERE ...
힌트 | 설명 |
pq_distribute(inner, none, none) | Full-parition Wise 조인으로 유도할 때 사용.양쪽 테이블 모두 조인 컬럼에 대해 같은 기준으로 파티션되어 있어야 작동 |
pq_distribute(inner, partition, none) | Partial-partition Wise 조인으로 유도할 때 사용.inner 테이블이 조인 키 컬럼으로 파티셔닝되어 있을 때만 작동 |
pq_distribute(inner, none, partition) | Partial-partition Wise 조인으로 유도할 때 사용.outer 테이블이 조인 키 컬럼으로 파티셔닝되어 있을 때만 작동 |
pq_distribute(inner, hash, hash) | 조인 키 컬럼을 해시 함수에 적용하고 거기서 반환된 값을 기준으로 양쪽 테이블을 동적으로 파티셔닝하라는 힌트 |
pq_distribute(inner, broadcast, none) | outer 테이블을 Broadcast하라는 힌트 |
pq_distribute(inner, none, broadcast) | inner 테이블을 Broadcast하라는 힌트 |