首批通过分布式安全可靠测评,为关键业务系统打造
CREATE OUTLINE
更新时间:2025-12-15 15:42:07
描述
该语句用来创建 Outline。可以通过两种方式创建 Outline,一种是通过 SQL_TEXT(用户执行的带参数的原始语句),另一种是通过 SQL_ID 创建。
注意
创建 Outline 需要进入对应的用户下执行。
语法
/* 使用 SQL_TEXT 创建 Outline */
CREATE [OR REPLACE] OUTLINE outline_name ON stmt [ TO target_stmt ]
/* 使用 SQL_ID 创建 Outline */
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 */。有关 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 方式创建的 Outline 会覆盖 SQL_ID 方式创建的 Outline,SQL_TEXT 方式创建的优先级更高。
此外,OceanBase 数据库通过 SQL_ID 区分不同的 SQL,而 SQL_ID 是通过 SQL_TEXT 取 MD5 加密得到的,相同的 SQL 文本即使多一个换行或制表符,MD5 得到的 SQL_ID 都会不同。在实际生产系统中,推荐通过 SQL_ID 进行 Outline 绑定。