説明
このステートメントは、アウトラインを作成するために使用します。アウトラインの作成方法は2つあります。1つは SQL_TEXT(ユーザーが実行したパラメータ付きの元のステートメント)を使用する方法で、もう1つは SQL_ID を使用して作成する方法です。
注意
アウトラインを作成するには、対応するユーザーの下で実行する必要があります。
構文
/* SQL_TEXTを使用してアウトラインを作成 */
CREATE [OR REPLACE] OUTLINE outline_name ON stmt [ TO target_stmt ]
/* SQL_IDを使用してアウトラインを作成 */
CREATE [OR REPLACE] OUTLINE outline_name ON 'sql_id' USING HINT hint_list
パラメータの説明
パラメータ |
説明 |
|---|---|
| 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 */ です。Hint構文の詳細については、『OceanBaseデータベースSQLチューニングガイド』の Optimizer Hint セクションを参照してください。 |
例
テストテーブルを作成し、データを挿入します。
obclient> CREATE TABLE employees ( emp_id INT, dept_id INT, salary INT, emp_name VARCHAR(50) ); obclient> INSERT INTO employees VALUES (1001, 10, 10000, 'John'), (1002, 10, 12000, 'Mike'), (1003, 20, 15000, 'Sarah'); obclient> CREATE INDEX idx_dept_id ON employees(dept_id);SQL_TEXTを使用してoutline1を作成します。obclient> CREATE OUTLINE outline1 ON SELECT/*+ index(employees idx_dept_id)*/ * FROM employees WHERE dept_id = 10;SQL_IDを使用してoutline2を作成します。obclient> -- まず、アウトラインをバインドするSQLのSQL_IDを確認します。 obclient> SELECT sql_id, trace_id, client_ip, user_name, query_sql FROM V$OB_SQL_AUDIT WHERE query_sql LIKE '%employees%'; obclient> -- 調べたSQL_IDを使用してアウトラインを作成します。 obclient> CREATE OUTLINE outline2 ON '549D27D6DD54688A9B25FD82D5650B96' USING HINT /*+ index(employees idx_dept_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 を使用したアウトラインのバインドを推奨します。