Sql-Server

ISNULL() OR 在 UPDATE 語句中為 NULL

  • December 15, 2021

我必須在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_IDNULL,它將設置為''.

Update Table set REC_ID = '' where REC_ID is NULL

這只會更新包含空值的記錄REC_ID,並將其設置為''

雖然它們最終都會給出相同的結果,但第二個將在更少的記錄上執行(除非 every REC_IDis NULL),它應該更快。

上述兩種情況的唯一區別是第一個語句沒有where子句,因此無論 REC_ID 是否存在,表中的所有行都將被更新NULL。而在第二種情況下,只有那些行將被更新 where REC_ID is null

當您遇到以下情況時,性能會受到影響:

Update Table set REC_ID = '' where isnull(REC_ID,'') ='' 

因為在上述情況下,謂詞不再是 a search argument。這意味著 SQL 伺服器不能有效地使用REC_ID列上的索引。

引用自:https://dba.stackexchange.com/questions/91556