Sql-Server
ISNULL() OR 在 UPDATE 語句中為 NULL
我必須在
UPDATE
具有 50 萬條記錄的實時線上數據庫上執行一個語句。我想知道哪個語句執行得更快:Update Table set REC_ID = isnull(REC_ID,'') Update Table set REC_ID = '' where REC_ID is null
我正在使用 Microsoft SQL Server 2012
這些查詢不會做同樣的事情。
Update Table set REC_ID = isnull(REC_ID,'')
這將更新每條記錄,如果
REC_ID
是NULL
,它將設置為''
.Update Table set REC_ID = '' where REC_ID is NULL
這只會更新包含空值的記錄
REC_ID
,並將其設置為''
。雖然它們最終都會給出相同的結果,但第二個將在更少的記錄上執行(除非 every
REC_ID
isNULL
),它應該更快。
上述兩種情況的唯一區別是第一個語句沒有
where
子句,因此無論 REC_ID 是否存在,表中的所有行都將被更新NULL
。而在第二種情況下,只有那些行將被更新 whereREC_ID is null
。當您遇到以下情況時,性能會受到影響:
Update Table set REC_ID = '' where isnull(REC_ID,'') =''
因為在上述情況下,謂詞不再是 a
search argument
。這意味著 SQL 伺服器不能有效地使用REC_ID
列上的索引。