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

Mad*_*Boy 1 sql-server-2005 sql-server-2008

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

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

Cha*_*ana 7

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

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