我是否有理由每次都停止使用SYSDATETIME()而不是GETDATE()?
不要问他们cpu现在是什么时候,或者sysdatetime需要更多指令来计算分数? Getdate是否正在进行四舍五入? sysdatetime可以更快,因为它不能进行舍入吗?
如果我没有存储纳秒,我显然不会使用sysdatetime,但是我要问的是存储大小以外的成本。 (我开发的当前应用程序每秒运行sysdatetime()至少280次)
答案 0 :(得分:16)
这比你写这个问题要快得多:
SELECT SYSDATETIME();
GO
DECLARE @d DATETIME2(7) = SYSDATETIME();
GO 10000
SELECT SYSDATETIME();
GO
DECLARE @d DATETIME = SYSDATETIME();
GO 10000
SELECT SYSDATETIME();
GO
DECLARE @d DATETIME2(7) = GETDATE();
GO 10000
SELECT SYSDATETIME();
GO
DECLARE @d DATETIME = GETDATE();
GO 10000
SELECT SYSDATETIME();
结果:
所以似乎并不重要。重要的是你赋予它的变量类型,甚至不是那么多。 10000 / 0.1秒意味着三角洲非常非常小,不足以担心。在这种情况下,我宁愿保持一致。
答案 1 :(得分:5)
在一些外观设计不佳的测试中,我的计算机上显示SYSDATETIME()
可能更快:
select sysdatetime()
go
declare @Dt datetime
select @dt = sysdatetime()
select @dt = DATEADD(day,1,@dt)
go 15000
select sysdatetime()
go
declare @Dt datetime
select @dt = GETDATE()
select @dt = DATEADD(day,1,@dt)
go 15000
select sysdatetime()
go
在我的机器上,这倾向于在前两个结果集之间产生约1秒的间隙,在第二个和第三个结果集之间产生约2秒的间隙。颠倒两个测试的顺序可以扭转差距。