SYSDATETIME()的成本是否高于GETDATE()?

Uğu*_*han 3 sql t-sql sql-server datetime sysdatetime

我有没有理由每次都停止使用SYSDATETIME()而不是GETDATE()?

难道他们都不问cpu是什么时候,或者sysdatetime需要更多指令来计算分数?Getdate是否正在进行四舍五入?sysdatetime可以更快,因为它不能进行舍入吗?

如果我不存储纳秒,我显然不会使用sysdatetime,但我问的是存储大小以外的成本.(我正在开发的当前应用程序每秒运行sysdatetime()至少280次)

Aar*_*and 17

这比你写这个问题要快得多:

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();
Run Code Online (Sandbox Code Playgroud)

结果:

  • 将SYSDATETIME分配给DATETIME2(7):3.4 s
  • 将SYSDATETIME分配给DATETIME:3.3 s
  • 将GETDATE分配给DATETIME2(7):3.4 s
  • 将GETDATE分配给DATETIME:3.3秒

所以看起来没关系.重要的是你赋予它的变量类型,甚至不是那么多.10000/0.1秒意味着三角洲非常非常小,不足以担心.在这种情况下,我宁愿保持一致.

  • 亚伦,你必须承认第一句话有点苛刻.我不知道我们需要责备这个可怜的家伙. (4认同)
  • @Brad抱歉布拉德,只是厌倦了"哪个更快,A还是B?" 这些问题浪费了更多人的时间而不是实际测试它们.我不认为这是OP的工作来编辑我的答案 - 如果他被冒犯了,请标记它. (2认同)

Dam*_*ver 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
Run Code Online (Sandbox Code Playgroud)

在我的机器上,这倾向于在前两个结果集之间产生约1秒的间隙,在第二个和第三个结果集之间产生约2秒的间隙.颠倒两个测试的顺序可以扭转差距.