SQL where where field in where field = with multiple ors?

时间:2010-02-26 16:50:28

标签: sql syntax

在性能方面哪些更好用? ......关于可读性/可理解性? ......关于公认的标准?

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

OR

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

对我来说,第一个似乎更直观/清晰,但我不确定公认的标准和性能。

5 个答案:

答案 0 :(得分:18)

它更易读,更普遍接受:

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

所有现代SQL服务器都会优化您的查询,因此它们很可能会被更改为在服务器上运行的相同代码,因此性能差异可以忽略不计或不存在。

修改

显然in选项更快,因为它评估为二进制查找,而倍=只是单独评估每个语句。

答案 1 :(得分:4)

所有主要引擎(MySQLPostgreSQLOracleSQL Server)都会将其优化为完全相同的计划。

答案 2 :(得分:2)

表现=相同。

可读性=“IN”

答案 3 :(得分:0)

我会说涉及in的第一个选项:

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

是:

  • 快得多
  • 更易于阅读
  • 无需使用多个or
  • 少输入
  • 在大型查询中更容易维护
  • 广泛使用

更多资料:

<强> SQL IN Directive Much Faster Than Multiple OR Clauses

答案 4 :(得分:0)

IN版本更清晰,因为它是单个术语,所以如果在WHERE子句中添加其他术语,则可以避免遗漏或错误构造括号的可能性。

此外,我相信更多的SQL实现将优化IN版本,假设索引可用。