SQL 服务器执行计划和扩展视图
SQL Server Execution Plans and Expanded Views
我正在尝试使用执行计划 XML 来分析动态 SQL 语句,特别是确定它是否引用了非索引视图。希望在单独的 C# 项目中通过 XPath 系统地导航 XML。
然而,默认情况下,SQL 语句似乎会在生成 QEP 之前扩展到组成表,因此它不包含对视图的引用。 (我想避免依赖基于字符串的语句文本搜索)
是否有一个选项可以扩展 XML 计划以包括视图扩展,或者是否有我可能想要考虑的替代方法?
谢谢。
构造查询执行计划时,会经历三个阶段——解析、绑定和优化。在绑定阶段,非索引视图被替换为它们的定义,在优化阶段,视图中未使用的列被删除。所以在最终的执行计划中,视图本身没有留下任何东西。当在查询中指定 NOEXPAND 提示时,情况并非如此,这是您可以在执行计划中找到视图的唯一情况。但这需要更改查询,这在您的情况下可能不是一个选项。
如果您想在查询中搜索视图使用情况,可能您应该尝试获取从 sys.dm_exec_sql_text 返回的查询文本并在那里搜索(但这并不简单,因为 VIEW$SOMETHING 将是在引用 VIEW$SOMETHING_ELSE).
的查询中找到
我正在尝试使用执行计划 XML 来分析动态 SQL 语句,特别是确定它是否引用了非索引视图。希望在单独的 C# 项目中通过 XPath 系统地导航 XML。
然而,默认情况下,SQL 语句似乎会在生成 QEP 之前扩展到组成表,因此它不包含对视图的引用。 (我想避免依赖基于字符串的语句文本搜索)
是否有一个选项可以扩展 XML 计划以包括视图扩展,或者是否有我可能想要考虑的替代方法?
谢谢。
构造查询执行计划时,会经历三个阶段——解析、绑定和优化。在绑定阶段,非索引视图被替换为它们的定义,在优化阶段,视图中未使用的列被删除。所以在最终的执行计划中,视图本身没有留下任何东西。当在查询中指定 NOEXPAND 提示时,情况并非如此,这是您可以在执行计划中找到视图的唯一情况。但这需要更改查询,这在您的情况下可能不是一个选项。
如果您想在查询中搜索视图使用情况,可能您应该尝试获取从 sys.dm_exec_sql_text 返回的查询文本并在那里搜索(但这并不简单,因为 VIEW$SOMETHING 将是在引用 VIEW$SOMETHING_ELSE).
的查询中找到