2016-09-15 49 views
1

有關SQL中更新語句性能的一個簡短問題。 假設我在表中有100萬行,並且我想更新其中一半的日期列。SQL更新性能

我的更新

UPDATE Table SET DATE = Date.dbo.fn_GetAlwaysUTCDate() WHERE (HALF THE ROWS) 

在上面的查詢,將功能Date.dbo.fn_GetAlwaysUTCDate()被稱爲50萬次?我知道如果它在WHERE它將在每一行被調用,因爲它不是編譯器/優化器眼中的確定性函數。

+0

UDF是不是預先評估(折),因此它必須在外部的行集..每一行如果你想要的行爲,一旦把它和存儲其可變回報執行。 –

+0

這就是我所做的,我只是不是100%肯定它是值得的! –

回答

0

顯然存儲日期時間的變量將永遠快:考慮到執行計劃:

對於查詢:

update colname set dt = dbo.fn_getutcdate() 

declare @dt datetime = dbo.fn_getutcdate() 

update colname set dt = @dt 

enter image description here

Eventhough百分比上看它是沒有多大的不同,但每個記錄計算標量將分別執行,這將是昂貴的操作並將該值保存在tablespool中,然後furt她更新

2

請試試這個。這種方式只能調用一次。

Declare @dt datetime = Date.dbo.fn_GetAlwaysUTCDate() 

UPDATE Table SET DATE = @dt WHERE (HALF THE ROWS) 
+0

任何想法在一般情況下會有多快?我正在這樣做,只是不確定它是否會帶來任何性能提升 –

+0

爲什麼不嘗試在你的機器上進行配置和測試? –

+0

比較兩種SQL的預計執行計劃。那會告訴你 – Hiten004