CREATE OUTLINE
目的
ノート:
ストアド・アウトラインは非推奨になりました。ストアド・アウトラインは、下位互換性を保つために今でもサポートされています。ただし、かわりにSQL計画管理を使用することをお薦めします。SQL計画管理では、ストアド・アウトラインよりも非常に安定したSQLパフォーマンスを実現するSQL計画ベースラインが作成されます。
DBMS_SPM
パッケージのMIGRATE_STORED_OUTLINE
ファンクションまたはEnterprise Manager Cloud Controlを使用して、既存のストアド・アウトラインをSQL計画ベースラインに移行できます。移行が完了したら、ストアド・アウトラインに移行済のマークが付けられ、削除できるようになります。DBMS_SPM
パッケージのDROP_MIGRATED_STORED_OUTLINE
ファンクションを使用して、システム上のすべての移行済ストアド・アウトラインを削除できます。
参照: SQL計画管理の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。DBMS_SPMパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
CREATE
OUTLINE
文を使用すると、ストアド・アウトラインを作成できます。ストアド・アウトラインは、実行計画を生成するためにオプティマイザが使用する属性集合です。最適化に影響する要因に変更があるかどうかにかかわらず、特定のSQL文が発行された場合に、実行計画の生成に影響するアウトラインの集合を使用するように、オプティマイザに指示します。これらの要因における変更を考慮するように、アウトラインを変更することもできます。
ノート:
影響を与えるSQL文には、アウトライン作成時に指定した文と一致する文字列を指定する必要があります。
関連項目:
-
実行計画の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。
-
アウトラインの変更については、「ALTER OUTLINE」を参照してください。
-
USE_STORED_OUTLINES
パラメータおよびUSE_PRIVATE_OUTLINES
パラメータの詳細は、「ALTER SESSION」および「ALTER SYSTEM」を参照してください。
前提条件
パブリック・アウトラインまたはプライベート・アウトラインの作成には、CREATE
ANY
OUTLINE
システム権限が必要です。
ソース・アウトラインからクローン・アウトラインを作成するには、SELECT_CATALOG_ROLE
ロールも必要です。
個々のセッションまたはシステムに対して、ストアド・アウトラインを動的に使用可能または使用禁止にできます。
-
USE_STORED_OUTLINES
パラメータを使用可能にすると、パブリック・アウトラインが使用可能になります。 -
USE_PRIVATE_OUTLINES
パラメータを使用可能にすると、プライベート・ストアド・アウトラインが使用可能になります。
構文
create_outline::=
ノート:
outline
の後に指定する必須の句はありません。ただし、outline
の後には1つ以上の句を指定する必要があり、FROM
句またはON
句のどちらかを指定する必要があります。
セマンティクス
PUBLIC | PRIVATE
PUBLIC
を指定すると、PUBLIC
が使用するアウトラインを作成できます。これはデフォルトです。
PRIVATE
を指定すると、現行のセッションのみがプライベートに使用するアウトラインを作成できます。このアウトラインのデータは、現行のスキーマに格納されます。
outline
ストアド・アウトラインに割り当てる一意の名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。outline
を指定しない場合、データベースがアウトライン名を生成します。
関連項目:
FROM source_outline句
FROM
句を使用すると、既存のアウトラインのコピーによって新しいアウトラインを作成できます。デフォルトでは、パブリック領域のsource_category
が検索されます。PRIVATE
を指定すると、現行のスキーマのアウトラインが検索されます。
アウトラインのコピーの制限事項
FROM
句を指定する場合、ON
句は指定できません。
関連項目:
「プライベート・クローン・アウトラインの作成: 例」および「プライベート・アウトラインのパブリック領域への公開: 例」を参照してください。
FOR CATEGORY句
ストアド・アウトラインをグループ化するために使用する任意の名前を指定します。たとえば、週末に使用するアウトラインの1つのカテゴリおよび四半期末に使用する別のカテゴリを指定できます。category
を指定しない場合、アウトラインはDEFAULT
カテゴリに格納されます。
ON句
文をコンパイルする際にアウトラインが作成されるSQL文を指定します。この句は、FROM
句を使用して既存のアウトラインのコピーを作成する場合のみに指定するオプションです。
指定できる文は、SELECT
、DELETE
、UPDATE
、INSERT
... SELECT
またはCREATE
TABLE
... AS
SELECT
のいずれかです。
ON句の制限事項:
この句には、次の制限事項があります。
-
ON
句を指定する場合、FROM
句は指定できません。 -
マルチテーブル
INSERT
文でアウトラインを作成できません。 -
ON
句内のSQL文に、リモート・オブジェクトのDML操作を含めることはできません。
ノート:
後続の文で、同じSQL文に対して追加のアウトラインを指定できますが、同じ文の各アウトラインはCATEGORY
句で異なるカテゴリを指定する必要があります。
例
アウトラインの作成: 例
次の文は、ON
文をコンパイルすることによってストアド・アウトラインを作成します。アウトラインはsalaries
という名前で、special
カテゴリに格納されます。
CREATE OUTLINE salaries FOR CATEGORY special ON SELECT last_name, salary FROM employees;
USE_STORED_OUTLINES
パラメータにspecial
が設定されている場合、同じSELECT
文が後でコンパイルされると、アウトラインsalaries
を作成する場合と同様に実行計画が生成されます。
プライベート・クローン・アウトラインの作成: 例
次の文は、前述の例で作成したパブリック・カテゴリsalaries
に基づいて、ストアド・プライベート・アウトラインmy_salaries
を作成します。
CREATE OR REPLACE PRIVATE OUTLINE my_salaries FROM salaries;
プライベート・アウトラインのパブリック領域への公開: 例
次の文は、プライベート編集の後、プライベート・アウトラインをパブリック領域にコピー(公開)します。
CREATE OR REPLACE OUTLINE public_salaries FROM PRIVATE my_salaries;