CREATE OUTLINE =================================== 描述 ----------- 该语句用来创建 OUTLINE。可以通过两种方式创建,一种是通过 SQL_TEXT(用户执行的带参数的原始语句),另一种是通过 SQL_ID 创建。 **说明** 创建 OUTLINE 需要进入对应的 DataBase 下执行。 格式 ----------- * **使用** **SQL_TEXT 创建** **OUTLINE** ```javascript CREATE [OR REPLACE] OUTLINE outline_name ON stmt [ TO target_stmt ] ``` * **使用** **SQL_ID 创建** **OUTLINE** ```javascript CREATE OUTLINE outline_name ON sql_id USING HINT hint; ``` 参数解释 ------------- | **参数** | **描述** | |----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | outline_name | 指定要创建的 OUTLINE 名称。 | | OR REPLACE | 指定 OR REPLACE 后,如果要创建的 OUTLINE 已存在,则会替换原有的 OUTLINE。 | | stmt | 一般为一个带有 hint 和原始参数的 DML 语句。 | | TO target_stmt | 如果不指定 TO target_stmt, 则表示如果数据库接受的SQL参数化后与stmt去掉hint参数化文本相同,则将该SQL绑定stmt中hint生成执行计划;如果期望对含有hint的语句进行固定计划,则需要 TO target_stmt 来指明原始的SQL。 **注意** 在使用target_stmt时,严格要求stmt与target_stmt在去掉hint后完全匹配。 | | sql_id | 如果sql_id对应的SQL语句已经有hint,则创建OUTLINE指定的hint会覆盖原始语句中所有hint。 | | hint | 格式为 /\*+ xxx \*/ 。 | 示例 ----------- * 使用 SQL_TEXT 创建 OUTLINE ```javascript CREATE OUTLINE otl_idx_c2 ON SELECT/*+ index(t1 idx_c2)*/ * FROM t1 WHERE c2 = 1; ``` * 使用 SQL_ID 创建 OUTLINE ```javascript CREATE OUTLINE otl_idx_c2 ON "ED570339F2C856BA96008A29EDF04C74" USING HINT /*+ index(t1 idx_c2)*/ ; ``` 注意事项 ------------- 使用 SQL_TEXT 方式创建的 OUTLINE 会覆盖 SQL_ID 方式创建的 OUTLINE,SQL_TEXT 方式创建的优先级高。