我想开始构建一个工具,该工具或多或少地向您显示使用执行计划解析的查询的数据沿袭 - 以便您获得以下形式的信息:
表 XY 的 A 列是通过取表 XZ 的 B 列并添加表 PL 的 C 列来计算的
你明白了:)
现在,当我尝试一些查询并查看相应的执行计划时,我遇到了一个问题,即存在一个随机表达式,没有任何关于如何计算的定义。
它出现在嵌套的 Loop OuterReferences 部分中,我只查询了一个表,似乎执行了索引扫描,然后进行了键查找。当“加入”这两个、索引扫描和键查找时,查询计划 XML 刚刚显示:
ColumnReference = Column="Expr1020"
我尝试在 XML 文件中搜索另一个出现的Expr1020,但没有。
Expr1020
现在,我的问题是:谁能解释为什么会发生这种情况或查询计划中到底发生了什么?
我认为使用的每个表达式都应该有一个以某种方式基于所使用的列的定义,但是这个永远不会再被引用:/
这可能用于嵌套循环预取。
有关更多详细信息,请参阅本文
输出还显示神秘节点使用标记为 [Expr1004] 且类型为 binary(24) 的表达式。此表达式在常规 showplan 输出中显示为嵌套循环连接的外部引用(相关参数): … 没有为此表达式提供定义,也没有在计划中的其他任何地方对其进行任何其他显式引用 … 预取操作符可以基于外部输入值发出多个异步读取。它使用一个小的内存缓冲区来跟踪,特别是保存索引叶页信息。 早先将此信息的引用视为外部引用二进制 (24) 表达式标签 Expr1004。我的理解是,叶页信息用于存储引擎的连接提示的内侧,以防止正常预读机制的重复工作。它也可以用于其他目的。
输出还显示神秘节点使用标记为 [Expr1004] 且类型为 binary(24) 的表达式。此表达式在常规 showplan 输出中显示为嵌套循环连接的外部引用(相关参数): … 没有为此表达式提供定义,也没有在计划中的其他任何地方对其进行任何其他显式引用
…
预取操作符可以基于外部输入值发出多个异步读取。它使用一个小的内存缓冲区来跟踪,特别是保存索引叶页信息。
早先将此信息的引用视为外部引用二进制 (24) 表达式标签 Expr1004。我的理解是,叶页信息用于存储引擎的连接提示的内侧,以防止正常预读机制的重复工作。它也可以用于其他目的。
XML 执行计划并未显示实际编译计划的所有详细信息。实际编译的计划可以包含 XML 计划不显示的附加属性甚至整个操作员节点。