2010-02-26 151 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

相关问题