如何确定SQL Server执行计划中使用的中间值所表示的内容

rdlzhqv9  于 2023-01-25  发布在  SQL Server
关注(0)|答案(1)|浏览(276)

我正在学习如何读取SQL Server中的实际执行计划。我注意到SQL Server倾向于将物理查询计划中使用的中间值表示为expr1006expr1007等(即expr后跟数字)。
这是一个屏幕截图,注意在底部附近,表达式expr1006, expr1008, expr1009列在output list部分。

有没有可能弄清楚它们到底代表什么?

m0rkklqb

m0rkklqb1#

右键单击计算标量并选择“属性”。
查看“定义值”部分。
如果在这里计算expr1006,您将看到类似expr1006 = SomeExpression()的内容。可能定义了多个表达式。

否则,沿着树向下到叶子,找到expr1006出现的第一个位置,并查看该操作符的属性。
对于大型计划,以XML格式查看并搜索expr1006是查看表达式定义位置的最快方法。即使对于小型计划,有时也需要这样做,因为对于某些结构,DefinedValue包含ValueVector而不是ColumnReference,并且这些结构不会显示在SSMS UI中。例如,您需要深入研究计划XML,以查看表达式是从内部函数GetRangeWithMismatchedTypes输出的。
以上内容通常就足够了。在SQL Server的某些版本中,还可以通过使用query_trace_column_values扩展事件. More information about that here来实际查看这些表达式的值。

相关问题