データ・ディクショナリで表またはパーティションにPARALLEL
属性があるとき、この属性設定が、INSERT
文、UPDATE
文、DELETE
文および問合せでの並列処理を決定するために使用されます。文での表に対する明示的なPARALLEL
ヒントは、データ・ディクショナリのPARALLEL
属性の効果よりも優先されます。
NO_PARALLEL
ヒントを使用すると、データ・ディクショナリの表のPARALLEL
属性を上書きできます。一般的にヒントは属性よりも優先されます。
DML操作の並列処理が考慮されるのは、ALTER
SESSION
ENABLE
PARALLEL
DML
文を使用してセッションがPARALLEL
DML
モードになっている場合、または、ENABLE_PARALLEL_DML
ヒントを使用して特定のSQL文がPARALLEL
DML
モードになっている場合です。このモードは、問合せまたはDML文の問合せ部分の並列処理には影響しません。
INSERT
... SELECT
文では、INSERT
キーワードの後にPARALLEL
ヒントを指定できます。このヒントはSELECT
キーワードの後にも指定できます。INSERT
キーワードの後のPARALLEL
ヒントはINSERT
操作のみに適用され、SELECT
キーワードの後のPARALLEL
ヒントはSELECT
操作のみに適用されます。したがって、INSERT
操作とSELECT
操作の並列処理は互いに独立しています。一方の操作をパラレルで実行できなくても、もう一方の操作をパラレルで実行できるかどうかには影響しません。
ユーザーがパラレルDMLをセッションで明示的に有効化した場合、および関連する表にデータ・ディクショナリ・エントリでPARALLEL
属性が設定されている場合、挿入操作をパラレル化できる機能により既存の動作が変更されます。この場合、選択操作がパラレル化された既存のINSERT
SELECT
文で、挿入操作もパラレル化できます。
複数の表を問い合せる場合は、複数のSELECT
PARALLEL
ヒントと複数のPARALLEL
属性を指定できます。
例8-8に、ACME
の買収後に雇用された新しい従業員の追加を示します。
例8-8 INSERT SELECTのパラレル化
INSERT /*+ PARALLEL(employees) */ INTO employees SELECT /*+ PARALLEL(ACME_EMP) */ * FROM ACME_EMP;
この例ではAPPEND
キーワードは必要ありません。PARALLEL
ヒントによって追加が暗黙的に指定されるためです。
PARALLEL
ヒント(UPDATE
またはDELETE
キーワードの直後に指定)は、基礎となるスキャン操作に適用されるだけではなく、UPDATE
またはDELETE
操作にも適用されます。または、変更対象の表の定義に指定されるPARALLEL
句で、UPDATE
またはDELETE
のパラレル化を指定できます。
セッションまたはトランザクションについてパラレルDMLを明示的に有効化した場合、問合せ操作がパラレル化されたUPDATE
文またはDELETE
文は、UPDATE
操作またはDELETE
操作もパラレル化できます。文の副問合せまたは更新可能ビューには、独自のPARALLEL
ヒントまたは句を指定できますが、これらのパラレル・ディレクティブは更新または削除をパラレル化する決定には影響しません。これらの操作をパラレルで実行できなくても、UPDATE
またはDELETE
部分をパラレルで実行できるかどうかには影響しません。
例8-9に、ダラスのすべての店員を10%昇給する更新操作を示します。
例8-9UPDATEとDELETEのパラレル化
UPDATE /*+ PARALLEL(employees) */ employees SET salary=salary * 1.1 WHERE job_id='CLERK' AND department_id IN (SELECT department_id FROM DEPARTMENTS WHERE location_id = 'DALLAS');
PARALLEL
ヒントは、UPDATE
操作とスキャンに適用されます。
例8-10には、カテゴリ39
のすべての商品の削除を示します。最近、事業が別会社として分離されたためです。
例8-10UPDATEとDELETEのパラレル化
DELETE /*+ PARALLEL(PRODUCTS) */ FROM PRODUCTS WHERE category_id = 39;
ここでも、並列性処理、表employees
のスキャンとUPDATE
操作に適用されます。