2016-02-15 41 views
1

我想創建一個過程。運行速度很重要。什麼是在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 

謝謝!

+14

*無論*您的性能出現問題時,我幾乎可以保證它不會根據你如何將列的值設置爲當前時間戳。有了性能,不要*猜測*或在互聯網上詢問人。設定目標和*措施*,如果它不符合目標,請將注意力集中在*瓶頸*上。 –

+0

向其他人展示存儲過程的代碼可能是真正的瓶頸。 –

回答

1

存在差異,但僅在極端情況下才可測量。第一個查詢稍微快一點,因爲它沒有使用額外的CPU功能查找每行的getdate值。

以下是一些要比較的測試腳本,您可以在執行腳本之前打開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 

該W生病是大致相同的性能,第二腳本

腳本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 
+0

非常感謝! – inon

相關問題