是否SYSDATETIME()成本比GETDATE多()?(Does SYSDATETIME() c

2019-08-16 22:34发布

是否有任何理由为什么我要停止使用SYSDATETIME()每次,而不是GETDATE()?

难道他们不都问CPU什么时候它还是不SYSDATETIME需要更多的指令来计算分数? 是否GETDATE舍入它的工作? SYSDATETIME可以更快,因为它不是四舍五入的工作?

我如果我不存储纳秒显然不会使用SYSDATETIME,但我问的不是存储容量等的费用。 (当前的应用程序我开发运行SYSDATETIME()至少为280倍的第二)

Answer 1:

这是更快的测试比你花写的问题:

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();

结果:

  • 分配到SYSDATETIME DATETIME2(7):3.4小号
  • 分配给SYSDATETIME DATETIME:3.3小号
  • 分配到GETDATE DATETIME2(7):3.4小号
  • 分配给GETDATE DATETIME:3.3小号

因此,它似乎没有关系。 重要的是你将它分配给变量的类型,甚至认为是不是很多。 10000 /0.1秒意味着增量是非常非常小,没有足够的担心。 我宁愿在这种情况下是一致的。



Answer 2:

在少数extermely设计不良的测试,我的机器上似乎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

在我的机器中,这趋向于产生所述第二和第三之间的第一两个结果集和〜2秒之间〜1秒的间隙。 倒车两次测试的顺序颠倒的空白。



文章来源: Does SYSDATETIME() cost more than GETDATE()?