2010-02-26 150 views
13

哪些更適合在性能方面使用? ......關於可讀性/可理解性? ...關於公認的標準?SQL where field in vs. where field = with multiple or?

SELECT * 
FROM Wherever 
WHERE Greeting IN ('hello', 'hi', 'hey') 

OR

SELECT * 
FROM Wherever 
WHERE Greeting = 'hello' 
    OR Greeting = 'hi' 
    OR Greeting = 'hey' 

第一看起來更直觀/我清楚,但我不能確定的公認標準和性能。

回答

14

它更易讀,更普遍接受的事:

SELECT * 
FROM Wherever 
WHERE Greeting in ('hello', 'hi', 'hey') 

所有現代的SQL服務器優化查詢,所以他們都可能被改變成在服務器上運行相同的代碼,所以性能差異將可以忽略或不存在。

編輯:

顯然,in選項是速度更快,因爲它的計算結果爲二進制查找,而多=只是evaulates每個單獨的語句。

+0

我不確定它更可接受,但IN的語法肯定更具可讀性。看看「問候在這個列表中」比「問候是這個還是問候語還是問候語是一些其他的事情」 – David

0

我想說的第一個選項涉及in

SELECT * 
FROM Wherever 
WHERE Greeting IN ('hello', 'hi', 'hey') 

是:

  • 快得多
  • 更容易閱讀
  • 沒有必要使用多個or
  • 少打字
  • 更容易保持大查詢
  • 廣泛應用於

更多的東西:

SQL IN Directive Much Faster Than Multiple OR Clauses

+0

那個鏈接並不像在SQL級別上那樣。它比較CF循環/價值表性能 – gbn

0

的版本更清晰,因爲它是一個單一的名詞,避免瞭如果將其他條款添加到WHERE子句中,則可能會出現遺漏或結構不正確的括號。

此外,我相信更多的SQL實現將優化IN版本,假設索引可用。

4

所有主要引擎(MySQLPostgreSQLOracleSQL Server)將其優化以完全相同的計劃。

2

表現=相同。

可讀性=「IN」

+1

ah- .. anonymous downvote無評論... – gbn

相關問題