什么是更好的表演:IN或OR

时间:2011-10-31 22:39:53

标签: mysql performance optimization request

我需要做一个检查列值是2117还是0的请求。

目前,我使用OR

执行此操作
select [...] AND (account_id = 2117 OR account_id = 0) AND [...]

由于我遇到了性能问题,我在徘徊是否做得更好

select [...] AND account_id IN (0, 2117) AND [...]

解释命令在两种情况下都给出了类似的结果。所以,也许更多的是优化解析阶段而不是其他任何事情。或者也许这两种方式是完全等效的,并且被mySQL优化掉了,我应该不在乎。

在mySQL网站上,他们讨论了OR优化:

  

使用x = ANY(包含(1,2)的表)而不是x = 1 OR x = 2.

但我没有正确的语法,甚至没有理解为什么。

您怎么看?

4 个答案:

答案 0 :(得分:2)

此处没有比赛...... IN 总是更多,更好。

原因是数据库不会使用带有OR的索引,而是使用带有IN的索引。

OR更改为IN通常是我对查询进行的第一次优化。

答案 1 :(得分:1)

为什么不试着运行一个沉重的基准?如果这是一个明显的差异,那么选择更好的选择,否则只需使用" OR"为了便于阅读。也许源代码会产生一些有用的答案,但这可能超出效率范围。

答案 2 :(得分:0)

在它中通常更容易阅读和处理引擎...但是,这说基于一些有限的数字。您不希望IN或OR具有20+ ID(通常)。当你遇到有大量数字的情况时,创建一个表(即使是临时表),插入你想要加入的值,然后使用它作为结果的SQL连接的基础。在处理更大的数据选择时提供更好的灵活性。

答案 3 :(得分:0)

我会说很多元素可能会有所不同,但不会有两个元素。我更倾向于调整索引或查看表结构,以找到有价值的性能改进。