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