我重写一些旧的存储过程,我已经使用功能,而不是内嵌代码时遇到意想不到的性能问题。为什么一个简单的T-SQL UDF功能,使代码执行慢3倍
的功能如下非常简单:
ALTER FUNCTION [dbo].[GetDateDifferenceInDays]
(
@first_date SMALLDATETIME,
@second_date SMALLDATETIME
)
RETURNS INT
AS
BEGIN
RETURN ABS(DATEDIFF(DAY, @first_date, @second_date))
END
所以我有两个相同的查询,但有使用功能,另一种则在查询本身的计算:
ABS(DATEDIFF(DAY, [mytable].first_date, [mytable].second_date))
现在使用内联代码的查询比使用该函数的查询运行得快3倍。
感谢您发表。你的最后一个链接是对这个问题的一个很好的实证分析,但并不能解释为什么会出现这种行为。 – 2009-08-10 11:59:30
@nagul - 你的第一个链接是坏的。看起来像SQLMag改变了他们的URL。这是文章的任何机会吗? http://sqlmag.com/user-defined-function-udf/udfs-endanger-performance – EBarr 2013-09-21 19:17:06