描述
该语句用来创建 Outline。可以通过两种方式创建,一种是通过 SQL_TEXT(用户执行的带参数的原始语句),另一种是通过 SQL_ID 创建。
说明
创建 OUTLINE 需要进入对应的 DataBase 下执行。
格式
- 使用 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 | 指定 |
stmt | 一般为一个带有 Hint 和原始参数的 DML 语句。 |
TO target_stmt | 如果不指定 注意 在使用 |
sql_id | 如果 |
hint | 格式为 |
示例
- 使用 SQL_TEXT 创建 Outline
CREATE OUTLINE otl_idx_c2
ON SELECT/*+ index(t1 idx_c2)*/ * FROM t1 WHERE c2 = 1;
- 使用 SQL_ID 创建 Outline
CREATE OUTLINE otl_idx_c2
ON "ED570339F2C856BA96008A29EDF04C74"
USING HINT /*+ index(t1 idx_c2)*/ ;
注意事项
当 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 绑定。