为什么简单的T-SQL UDF函数会使代码执行速度降低3倍
发布时间:2020-12-12 06:41:06 所属栏目:MsSql教程 来源:网络整理
导读:我正在重写一些旧的存储过程,并且在使用函数而不是内联代码时遇到了意外的性能问题. 功能非常简单如下: ALTER FUNCTION [dbo].[GetDateDifferenceInDays] ( @first_date SMALLDATETIME,@second_date SMALLDATETIME)RETURNS INT ASBEGIN RETURN ABS(DATEDIFF(
我正在重写一些旧的存储过程,并且在使用函数而不是内联代码时遇到了意外的性能问题.
功能非常简单如下: 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倍. 解决方法你拥有的是一个标量UDF(取0到n个参数并返回一个标量值).这样的UDF通常会导致查询的逐行操作,除非使用常量参数调用,这与您在查询中遇到的性能降低完全相同.有关使用UDF的性能缺陷的详细说明,请参见here,here和here. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |