有什么理由我应该每次停止使用SYSDATETIME()而不是GETDATE()吗?
他们俩都不问CPU现在几点了吗,或者sysdatetime是否需要更多指令来计算分数? Getdate是否可以四舍五入? sysdatetime是否可以更快,因为它无法进行舍入?
如果我不存储纳秒级的数据,我显然不会使用sysdatetime,但是我要问的是除存储大小之外的其他成本。 (我正在开发的当前应用程序每秒至少运行sysdatetime()280次)
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秒表示增量非常小,不足以担心。在这种情况下,我宁愿保持一致。
在一些设计极差的测试中,在我的计算机上,似乎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秒的间隔。颠倒两个测试的顺序可以逆转差距。