在sql server中插入当前日期的最快方法是什么

时间:2016-02-15 09:58:53

标签: sql-server

我想创建一个程序。运行速度很重要。

插入当前日期的更快捷方式是什么?

1

create table T1(D datetime, A int)
declare @D datetime
set @D = getdate()
insert T1(D,A)
select @D, B
from T2

2

create table T1(D datetime default getdate(), A int)
insert T1(A)
select B
from T2

3

create table T1(D datetime, A int)
insert T1(D,A)
select getdate(), B
from T2

谢谢!

1 个答案:

答案 0 :(得分:1)

存在差异,但在极端情况下只能衡量。第一个查询稍微快一点,因为它在为每一行查找getdate的值时不会使用额外的CPU功率。

以下是一些要比较的测试脚本,您可以在执行脚本之前打开INCLUDE CLIENT STATISTICS。每个脚本在我的计算机上花费大约7或8秒钟:

这比其他脚本快1秒左右:

脚本1

--DROP TABLE #t1
CREATE TABLE #T1(D datetime, A int)
DECLARE @D datetime
SET @D = getdate()
;WITH N(N)AS 
(SELECT 1 FROM(VALUES(1),(1),(1),(1),(1),(1),(1),(1),(1),(1))M(N)),
tally(N)AS(SELECT ROW_NUMBER()OVER(ORDER BY N.N)FROM N,N a,N b,N c,N d,N e,N f)
INSERT #T1(D,A)
SELECT top 10000000 @D, N FROM tally

这与第三个脚本的性能大致相同

脚本2

--DROP TABLE #t1
CREATE TABLE #T1(D datetime default getdate(), A int)
;WITH N(N)AS 
(SELECT 1 FROM(VALUES(1),(1),(1),(1),(1),(1),(1),(1),(1),(1))M(N)),
tally(N)AS(SELECT ROW_NUMBER()OVER(ORDER BY N.N)FROM N,N a,N b,N c,N d,N e,N f)
INSERT #T1(A)
SELECT top 10000000 N FROM tally

这与第二个脚本的性能大致相同

脚本3

--DROP TABLE #t1
CREATE TABLE #T1(D datetime, A int)
;WITH N(N)AS 
(SELECT 1 FROM(VALUES(1),(1),(1),(1),(1),(1),(1),(1),(1),(1))M(N)),
tally(N)AS(SELECT ROW_NUMBER()OVER(ORDER BY N.N)FROM N,N a,N b,N c,N d,N e,N f)
INSERT #T1(D,A)
SELECT top 10000000 getdate(), N
FROM tally