1 个赞
根据您提供的信息及文档片段中的说明,关于 CREATE OUTLINE 语句的行为可以解释如下:
-
不带
TO target_stmt参数时:OceanBase 会将传入的 SQL (stmt_with_hint) 中去除 Hint 后的内容进行参数化处理。如果之后数据库接受到一个 SQL,在同样经过参数化处理后与这个去除 Hint 的内容相匹配,则该 SQL 将会被绑定至原先带有 Hint 的执行计划上。 -
带
TO target_stmt参数时:此时创建的 Outline 将仅对指定的目标语句target_stmt生效。这意味着即使有其他 SQL 在去掉 Hint 并经过参数化后与stmt_with_hint相同,也不会使用该 Outline,除非它们恰好是target_stmt。在这种情况下,实际上是用target_stmt做了更严格的匹配条件。
因此,您的理解是正确的。如果不带 TO 参数,则使用 stmt_with_hint 去掉 Hint 后的内容来匹配;而当带有 TO target_stmt 参数时,则直接以 target_stmt 作为匹配依据。这确保了只有特定的 SQL 才能被应用上对应的优化建议。
以上解释基于以下文档片段:
更多信息请查看:
