跳到主要内容

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_TEXTMD5 加密得到的。在实际生产系统中,推荐通过 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 语句。
注意
  • 如果期望对含有 Hint 的语句进行固定计划,则应使用 format_target_stmt 指明原始 SQL。
  • 在使用 TO format_target_stmt 子句时,要求原始 SQL format_stmtformat_target_stmt 在去掉 Hint 并且格式化处理后匹配。
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 的示例信息,请参见 计划绑定