説明
このステートメントは、アウトラインを作成するために使用されます。アウトラインの作成方法は2種類あります。1つはSQL_TEXT(ユーザーが実行したパラメータ付きの元のステートメント)を使用して作成する方法、もう1つはSQL_IDを使用して作成する方法です。
注意
アウトラインを作成するには、対応するユーザー権限で実行する必要があります。
構文
/* SQL_TEXTを使用してアウトラインを作成 */
CREATE [OR REPLACE] OUTLINE outline_name ON stmt [ TO target_stmt ]
/* SQL_IDを使用してアウトラインを作成 */
CREATE OUTLINE outline_name ON sql_id USING HINT hint;
パラメータの説明
| パラメータ | 説明 |
|---|---|
| outline_name | 作成するアウトラインの名前を指定します。 |
| OR REPLACE | OR REPLACE を指定した場合、作成しようとしているアウトラインが既に存在する場合は、既存のアウトラインを置き換えます。 |
| stmt | 通常は hint と元のパラメータを含むDMLステートメントです。 |
| TO target_stmt | TO target_stmt を指定しない場合、データベースが受け入れるSQLがパラメータ化された後、stmt から hint のパラメータ化テキストを除いたものと同じであれば、そのSQLは stmt 内の hint にバインドされ、実行計画が生成されます。hint を含むステートメントに対して固定計画を期待する場合は、元のSQLを指定するために TO target_stmt が必要です。 注意 target_stmt を使用する際は、stmt と target_stmt が hint を除いた後に完全に一致することが厳密に求められます。 |
| sql_id | sql_id に対応するSQL文にすでに hint が設定されている場合、Outlineで指定された hint は元の文のすべての hint を上書きします。 |
| hint | 形式は /*+ xxx */ です。Hint構文の詳細については、『OceanBaseデータベースSQLチューニングガイド』の Optimizer Hint 章を参照してください。 |
例
SQL_TEXTを使用してoutline1を作成します。obclient> CREATE OUTLINE outline1 ON SELECT/*+ index(tbl1 idx_col2)*/ * FROM tbl1 WHERE col2 = 1;SQL_IDを使用してoutline2を作成します。obclient> CREATE OUTLINE outline2 ON 'ED570339F2C856BA96008A29EDF04C74' USING HINT /*+ index(tbl1 idx_col2)*/ ;
注意事項
SQL_ID が同じ場合、SQL_TEXT を使用して作成されたアウトラインは、SQL_ID を使用して作成されたアウトラインを上書きします。SQL_TEXT を使用した作成の優先順位が高いためです。
さらに、OceanBaseデータベースでは SQL_ID を使用して異なるSQLを区別しますが、SQL_ID は SQL_TEXT から MD5 加密を行って得られます。同一のSQLテキストであっても、改行やタブが1つ増えただけで、MD5 によって得られる SQL_ID は異なります。実際の本番システムでは、SQL_ID を使用したアウトラインのバインドを推奨します。