是否执行了视图列集中的所有函数,即使它们没有在查询中显式引用?
Posted
技术标签:
【中文标题】是否执行了视图列集中的所有函数,即使它们没有在查询中显式引用?【英文标题】:Are all functions in a view's column set executed, even if they aren't explicitly referenced in a query? 【发布时间】:2020-03-05 16:25:11 【问题描述】:假设我有一个视图定义,例如:
CREATE VIEW dbo.view1
AS
SELECT col1
, col2
, dbo.Function(col3) AS col3
FROM table1
现在假设我进行以下查询:
SELECT col1
FROM view1
在这种情况下是否会执行该函数,因为它没有在查询中被引用?
提前致谢。
【问题讨论】:
您的实验向您展示了什么?执行计划有何建议? 优化器应该能够确定不需要执行该函数。是否这样做可能取决于产品的特定版本(直至补丁级别)、数据量、月相等。如果您想知道优化器 做了什么,您需要询问执行计划。 也许;视图不能解决任何问题,因此查询应该作为其执行的一部分被重新编写和重新计划(即优化器会将您的查询放在视图上并将所有内容下推,就好像您正在运行查询一样而是在视图中编码,列更少),我认为运行的结果查询很可能不会对函数有任何引用 稍微绕道......但如果你有一个标量函数作为列值,你应该考虑修复它。 Larnu - 良好的调用 - 执行计划表明如果未引用该列,则不调用该函数。早该想到的! 【参考方案1】:感谢 Larnu 建议检查执行计划,我确定至少在我上面概述的情况下,如果未引用该列,则不会执行该函数。
【讨论】:
以上是关于是否执行了视图列集中的所有函数,即使它们没有在查询中显式引用?的主要内容,如果未能解决你的问题,请参考以下文章