是否有任何理由为什么我要停止使用SYSDATETIME()每次,而不是GETDATE()?
难道他们不都问CPU什么时候它还是不SYSDATETIME需要更多的指令来计算分数? 是否GETDATE舍入它的工作? SYSDATETIME可以更快,因为它不是四舍五入的工作?
我如果我不存储纳秒显然不会使用SYSDATETIME,但我问的不是存储容量等的费用。 (当前的应用程序我开发运行SYSDATETIME()至少为280倍的第二)
是否有任何理由为什么我要停止使用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秒意味着增量是非常非常小,没有足够的担心。 我宁愿在这种情况下是一致的。
在少数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秒的间隙。 倒车两次测试的顺序颠倒的空白。