在性能方面哪些更好用? ......关于可读性/可理解性? ......关于公认的标准?
SELECT *
FROM Wherever
WHERE Greeting IN ('hello', 'hi', 'hey')
OR
SELECT *
FROM Wherever
WHERE Greeting = 'hello'
OR Greeting = 'hi'
OR Greeting = 'hey'
对我来说,第一个似乎更直观/清晰,但我不确定公认的标准和性能。
答案 0 :(得分:18)
它更易读,更普遍接受:
SELECT *
FROM Wherever
WHERE Greeting in ('hello', 'hi', 'hey')
所有现代SQL服务器都会优化您的查询,因此它们很可能会被更改为在服务器上运行的相同代码,因此性能差异可以忽略不计或不存在。
修改强>
显然in
选项更快,因为它评估为二进制查找,而倍=
只是单独评估每个语句。
答案 1 :(得分:4)
所有主要引擎(MySQL
,PostgreSQL
,Oracle
和SQL 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版本,假设索引可用。