存在差異,但僅在極端情況下才可測量。第一個查詢稍微快一點,因爲它沒有使用額外的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
*無論*您的性能出現問題時,我幾乎可以保證它不會根據你如何將列的值設置爲當前時間戳。有了性能,不要*猜測*或在互聯網上詢問人。設定目標和*措施*,如果它不符合目標,請將注意力集中在*瓶頸*上。 –
向其他人展示存儲過程的代碼可能是真正的瓶頸。 –