CREATE FORMAT OUTLINE
描述
该语句用来创建模糊 Outline。可以通过两种方式创建模糊 Outline,一种是通过 FORMAT_SQL_TEXT(用户执行的带参数的原始语句),另一种是通过 FORMAT_SQL_ID 创建。
使用限制及注意事项
-
创建 Outline 需要进入对应的用户下执行。
-
当
FORMAT_SQL_ID相同时,使用FORMAT_SQL_TEXT方式创建的 Outline 会覆盖FORMAT_SQL_ID方式创建的 Outline,FORMAT_SQL_TEXT方式创建的优先级更高。此外,seekdb 通过FORMAT_SQL_ID区分不同的 SQL,而FORMAT_SQL_ID是通过FORMAT_SQL_TEXT取MD5加密得到的。在实际生产系统中,推荐通过FORMAT_SQL_ID进行 Outline 绑定。信息-
FORMAT_SQL_TEXT的匹配规则忽略参数内容、大小写以及空格和换行符等非语法性符号的差异,只比较经过这些处理后的文本内容。 -
FORMAT_SQL_ID是通过格式化FORMAT_SQL_TEXT(移除多余的空格和换行符,将所有字符统一转换为大写或小写)之后,对格式化的结果应用MD5哈希加密来生成的。
-
语法
/* 使用 FORMAT_SQL_TEXT 创建 Outline */
CREATE [OR REPLACE] FORMAT OUTLINE outline_name ON format_stmt [ TO format_target_stmt ]
/* 使用 FORMAT_SQL_ID 创建 Outline */
CREATE [OR REPLACE] FORMAT OUTLINE outline_name ON format_sql_id USING HINT hint;
参数解释
| 参数 | 描述 |
|---|---|
| outline_name | 指定要创建的模糊 Outline 名称。 |
| OR REPLACE | 如果指定 OR REPLACE,并且要创建的 Outline 已存在,则替换原有的 Outline。 |
| format_stmt | 指定 SQL 原始文本,即希望应用 Outline 的 SQL 语句或操作。:::info seekdb 内部会自动把非格式化的 SQL 文本处理成格式化的 SQL 文本。 ::: |
| TO format_target_stmt | 可选项,用于指定将 format_stmt 转换或应用到的目标 SQL 语句,即让 Outline 也适用于其它的 SQL 语句,可以使用 TO format_target_stmt 这个选项来声明这些 SQL 语句。注意
|
| format_sql_id | 需要绑定的 SQL 对应的经过一系列规则改写后得到的 format_stmt,然后根据 format_stmt 计算 MD5 值得到的 format_sql_id。 |
示例
-
使用
FORMAT_SQL_TEXT创建 Outline。CREATE FORMAT OUTLINE my_outline ON SELECT * FROM employees WHERE department_id = ?; -
使用
FORMAT_SQL_ID创建 Outline。CREATE FORMAT OUTLINE my_sql_id_outline ON 'ED570339F2C856BA96008A29EDF04C74' USING HINT /*+ index(t1 idx_c2)*/;
相关文档
更多使用 Outline 的示例信息,请参见 计划绑定。