![]() |
1
2
确定性意味着相同的输入返回与时间和数据库无关的相同输出。 SQL Server(任何版本)都不缓存UDF—我相信它可以避免在一行上调用两次UDF,但就是这样。 我用过的一个技巧是(我想我把它贴在这里了): 如果可以,重构UDF,以便有效地为给定的输入集返回可用的离散值子集。对于数值计算,有时可以重构逻辑以返回一个因子或速率,该因子或速率是在UDF外部相乘的,而不是从传入的值在UDF内部相乘的。 对不同的行集调用UDF并将结果缓存到临时表中。如果只调用17000000行集上有100000个参数元组的UDF,则 非常 效率更高。 连接到临时表(基本上是从基于代码的逻辑转换为基于表的逻辑)以获取值。 这张桌子可以根据需要重新使用,甚至可以保留。 添加到表中可以通过第一个左连接来查找丢失的缓存项。 这适用于单行表值udf和标量udf。我主要用于表值udf。有一个针对SQL Server 2005的修补程序,它应该解决UDF的性能问题——我正在等待dba在部署到生产环境之前测试它。 |
![]() |
Duvan · 将逗号(,)替换为点(.)[副本] 2 年前 |
![]() |
Mateen Bagheri · 选择表的计数并选择其自身 2 年前 |
![]() |
SoT · SQL Server中求和函数的工作方式 2 年前 |
![]() |
NKAT · 将列值聚合到列表中会产生错误 2 年前 |
![]() |
deanpillow · 返回两列中有一个匹配值的记录 2 年前 |
![]() |
snowflakes74 · 在Dapper中异步查询多个结果 2 年前 |