説明
このステートメントは、アウトラインを作成するために使用します。作成方法は2通りあります。1つは SQL_TEXT(ユーザーが実行したパラメータ付きの元のステートメント)を使用する方法で、もう1つは SQL_ID を使用する方法です。
説明
アウトラインを作成するには、対応するデータベースに入って実行する必要があります。
SQL_ID が同じ場合、SQL_TEXT 方式で作成されたアウトラインは、SQL_ID 方式で作成されたアウトラインを上書きします。SQL_TEXT 方式で作成された方が優先順位が高いです。
また、OceanBaseデータベースは SQL_ID で異なるSQLを区別しますが、SQL_ID は SQL_TEXT のMD5ハッシュ値です。同じSQLテキストでも改行やタブが1文字でも違うと、MD5で得られる SQL_ID は異なります。実際の本番システムでは、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 | 通常は、ヒントと元のパラメータを含むDMLステートメントです。 |
| TO target_stmt | TO target_stmt を指定しない場合、データベースが受け付けるSQLがパラメータ化された後、stmt のヒントを除いたパラメータ化テキストと同じである場合、そのSQLは stmt のヒントで実行計画を生成します。ヒントを含むステートメントに対して固定計画を適用する場合は、TO target_stmt で元のSQLを指定する必要があります。 注意 target_stmt を使用する場合、stmt と target_stmt はヒントを除去した後、完全に一致している必要があります。 |
| sql_id | sql_id に対応するSQLステートメントに既にヒントが設定されている場合、アウトライン作成時に指定したヒントが元のステートメント内のすべてのヒントを上書きします。 |
| hint | 形式は /*+ xxx */ です。 |
例
SQL_TEXTを使用してアウトラインを作成します。obclient> CREATE OUTLINE otl_idx_c2 ON SELECT/*+ index(t1 idx_c2)*/ * FROM t1 WHERE c2 = 1;SQL_IDを使用してアウトラインを作成します。obclient> CREATE OUTLINE otl_idx_c2 ON 'ED570339F2C856BA96008A29EDF04C74' USING HINT /*+ index(t1 idx_c2)*/ ;