SQL 中内联表值函数的性能影响

Posted

技术标签:

【中文标题】SQL 中内联表值函数的性能影响【英文标题】:Performance impact of Inline Table Value Function in SQL 【发布时间】:2018-11-02 10:31:10 【问题描述】:

我在数据仓库系统中有一个使用内联表值函数 (ITVF) 的存储过程。如果我将 ITVF 的代码复制到程序本身,那么它会大大提高性能(从 50 秒到 9 秒)。我的印象是 ITVF 的执行就像程序本身的代码一样。

我可以看到使用 ITVF 时查询计划中的实际行数和估计行数之间存在巨大差异。

在 ITVF 中是否有可能进行参数嗅探?还有什么原因?谢谢。

【问题讨论】:

不看代码本身就很难说... 【参考方案1】:

您的函数使查询不可分割,因此查询优化器无法为其创建正确的执行计划。这就是为什么实际行和估计行之间存在巨大差异的原因。

【讨论】:

我不认为你可以在一般情况下做出这样的陈述。你有支持文件吗?

以上是关于SQL 中内联表值函数的性能影响的主要内容,如果未能解决你的问题,请参考以下文章

内联表值函数中 SELECT * 的性能

为啥我在此 SQL Server 内联表值函数上收到 11555 错误?

如何检索 sql server 内联表值函数的返回值的元数据?

sql2005中 表值函数是啥

SQL Server 2012 内联表值函数返回空行

如何在 SQL Server 中将拆分函数转换为内联表值 udf?