我想创建一个程序。运行速度很重要。
插入当前日期的更快捷方式是什么?
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
谢谢!
答案 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