2016-05-12 66 views
0

哪種說法比較好?哪個SQL語句更好?

Update tableA set field1 = @AAA 
where fieldB = 12345 
and fieldC = 'Ask' 
and fieldA <> @AAA 

或者

Update tableA set field1 = @AAA 
where fieldB = 12345 
and fieldC = 'Ask' 

假設只有小於5行匹配的標準,是它的冗餘添加FIELDA <> @AAA?它可能會減慢搜索速度,但它會過濾掉那些不需要更新的記錄。所以我不知道我是否應該總是添加這個條件。

+0

當然,即使結果相同,更新更少的行也會更好(考慮可能的觸發器f.e.)。 –

回答

0

兩者不一樣。正確的第一個查詢應該考慮到NULL。這比聽起來更麻煩:

Update tableA 
    set field1 = @AAA 
    where fieldB = 12345 and 
      fieldC = 'Ask' and 
      (fieldA <> @AAA or fieldA is null and @AAA is not null or 
      fieldA is not null and @AAA is null 
     ); 

作爲評價和其他答覆中提到,限行數是在查詢執行得更好意義上的「好」。如果您有三列的索引,例如(fieldB, fieldC, fieldA),則尤其如此。然後,引擎可以使用索引確定要更新哪些行 - 可能會在讀取一堆行時進行保存。

注意:當值相同時,數據庫是否發生「實際」更新的數據庫不同。也就是說,是否記錄更新以及是否激活觸發器。

+0

是的,你是對的我需要考慮空值。然而,你能否解釋更多關於「是否記錄更新以及是否激活觸發器」。我不明白。 – invicil

+0

這些細節取決於數據庫。 –

0

您應該必須使用第一個查詢,因爲它會更新最小記錄,並且不會從此查詢更新不必要的行。