gar*_*rik 6 performance sql-server determinism
我有两个函数:fn_Without_Param和fn_With_Param
CREATE FUNCTION [dbo].[fn_Without_Param]
(
)
...
INNER JOIN .. ON .. AND SubmitDate = CONVERT( varchar(10), GETUTCDATE(), 101 )
Run Code Online (Sandbox Code Playgroud)
和
/*
I am requesting it so:
declare @SubmitDate datetime
set @SubmitDate = CONVERT( varchar(10), GETUTCDATE(), 101 )
select * from [dbo].[fn_With_Param] (@SubmitDate)
*/
CREATE FUNCTION [dbo].[fn_With_Param]
(
@SubmitDate datetime
)
...
INNER JOIN .. ON .. AND SubmitDate = @SubmitDate
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,我有不确定性 (?) 函数(因为 GETUTCDATE)并且我用相同的输入参数调用了第二个函数(CONVERT(varchar(10), GETUTCDATE(), 101 ) - 今天没有小时,分钟,秒,毫秒)。我的函数是不确定的吗?如何检测这一点,也许 sql server 有一些公共标记。为什么第二个函数更慢?
我不确定是否有标志,但在http://msdn.microsoft.com/en-us/library/ms178091.aspx上有一个参考,其中内置函数是确定性的。
GETDATE() 和 GETUTCDATE() 是不确定的,因为如果您使用相同的参数多次调用它们(在本例中为无),则会得到不同的值。换句话说,返回值不是由输入决定的。
至于为什么第二个比第一个慢,请检查 SubmitDate = @SubmitDate 之间的隐式转换。他们都是约会时间吗?