sql-server-2005 - Microsoft SQL Server 中存储过程与标量值函数的性能

标签 sql-server-2005 sql-server-2008

我想知道存储过程和标量值函数之间的性能差异。现在我主要使用标量值函数,因为我可以在其他查​​询中使用它们(并且 99% 的时间它们返回 1 个值)。 但是有一些我从未在其他查询中使用过的标量值函数,通常我用简单的 SELECT dbo.somefunction (parameter) 调用它们,仅此而已。

从性能的角度来看,将它们迁移到存储过程会更好吗?

最佳答案

标量值函数在每次调用时都会重新编译。这是因为它们不能包含在由查询优化器/处理器处理的 sql 创建的计划缓存中。

对于你只调用一次 udf 的情况,(如 Select dbo.UDFName(params) )它真的无关紧要,但如果你在查询中使用标量值 udf检查一百万行,udf 将被编译一百万次。这肯定会影响性能。有一种技术(如果算法可以写在基于集合的结构中),您可以将标量 UDF 转换为所谓的表值内联 udf,返回一行/一列表......这些可以是包含在 sql 查询中的计划缓存与 sql 的其余部分一起,因此它们不受此性能影响......

关于sql-server-2005 - Microsoft SQL Server 中存储过程与标量值函数的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2929349/

相关文章:

java - 内存峰值尝试加载大量对象并流式传输到 csv

sql - 更新 WHERE NOT EXISTS 问题

sql-server - 在 SQL 上将行转换为字符串

sql-server - 查看 SQL Server 数据库对象列表时如何识别系统对象?

sql-server-2008 - 将表从一个数据库复制到另一个数据库

sql - 如何更改自动增长大小? MS SQL Server 2005

sql - 有人知道自动将一堆测试(虚拟)数据转储到 sql 数据库中的程序吗?

SQL Server 2005 专业版上的 SQL 事件探查器

sql-server-2008 - 在 SQL Server Management Studio 2008 R2 右侧打开新选项卡

sql - 在T-SQL中强制转换nvarchar变量