説明
このステートメントは、アウトラインを作成するために使用されます。作成方法は2種類あります。一つはSQL_TEXT(ユーザーが実行するパラメータ付きの元のステートメント)を使用して作成する方法、もう一つは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 | 一般的には、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が設定されている場合、アウトライン作成時に指定されたHintは元のステートメント内のすべてのHintを上書きします。 |
| 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)*/ ;