Stuart Blackler Asked: 2011-12-29 04:46:28 +0800 CST2011-12-29 04:46:28 +0800 CST 2011-12-29 04:46:28 +0800 CST 表值函数与 UDF SQL Server 772 我目前正在观看有关 Entity Framework的视频,大约 15 分钟后,演讲者说表值函数偶尔会执行 UDF。 我的问题是在什么情况下 TVF 的性能优于 UDF? sql-server 2 个回答 Voted Best Answer gbn 2011-12-29T04:57:01+08:002011-12-29T04:57:01+08:00 具有表访问权限的标量 UDF 就像在 RBAR curso 中查找一样。也就是说,它每行执行一次。它是优化者的黑匣子 TVF 是一个像视图一样扩展的宏,被认为是外部查询的一部分 标量 UDF 有用途,但在这种情况下没有。 性能差异可能是巨大的:通过消除对 UDF 的愚蠢使用,我已经实现了 x100,000+ 改进 Oleg Dok 2011-12-29T04:51:23+08:002011-12-29T04:51:23+08:00 我们什么时候需要为每一行调用该函数 - 与 UDF 相比,它更像是游标循环 - 因为它强制 Sql Server 使用单线程查询计划。TVF没有这样的限制 所以,答案是——如果查询可以并行化——那么 TVF 优于 UDF
标量 UDF 有用途,但在这种情况下没有。
性能差异可能是巨大的:通过消除对 UDF 的愚蠢使用,我已经实现了 x100,000+ 改进
我们什么时候需要为每一行调用该函数 - 与 UDF 相比,它更像是游标循环 - 因为它强制 Sql Server 使用单线程查询计划。TVF没有这样的限制
所以,答案是——如果查询可以并行化——那么 TVF 优于 UDF