2013-07-11 78 views

回答

2

NOT IN ('val4')基本上等同於

WHERE 
    NOT (column = 'val4') /* or column <> 'val4' */ 

IN ('val1', 'val2', 'val3')基本上等同於

WHERE 
(
    column = 'val1' 
    OR 
    column = 'val2' 
    OR 
    column = 'val3' 
) 

我希望第一個選項是快,如果只是可以忽略不計。 SQL引擎可能會根據您在IN函數中指定的值的數量以及您的表上可用的索引,對IN進行不同的優化。你看到你在質疑使用方法的行爲是什麼?

+0

我通常會使用'!=',但我認爲我已經閱讀過(在SO),它並不總是最好的選擇,並可能導致性能問題。 – johntrepreneur

+0

你說的話很有道理。只是尋找我可能會缺失的任何其他見解。 – johntrepreneur

1

檢查查詢計劃。如果Val4是非聚集索引,我敢打賭,這兩個計劃都是索引查找。
我測試過,不在,=和<>,並且所有的都是相同的查詢計劃。
如果他們有相同的查詢計劃,我懷疑實際的性能差異會大到足以看到。但我仍然會用單一的價值。

由於只有少數值,索引視圖可能會有最佳性能。