我需要做一个检查列值是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.
但我没有正确的语法,甚至没有理解为什么。
您怎么看?
答案 0 :(得分:2)
此处没有比赛...... IN
总是更多,更好。
原因是数据库不会使用带有OR
的索引,而是使用带有IN
的索引。
将OR
更改为IN
通常是我对查询进行的第一次优化。
答案 1 :(得分:1)
为什么不试着运行一个沉重的基准?如果这是一个明显的差异,那么选择更好的选择,否则只需使用" OR"为了便于阅读。也许源代码会产生一些有用的答案,但这可能超出效率范围。
答案 2 :(得分:0)
在它中通常更容易阅读和处理引擎...但是,这说基于一些有限的数字。您不希望IN或OR具有20+ ID(通常)。当你遇到有大量数字的情况时,创建一个表(即使是临时表),插入你想要加入的值,然后使用它作为结果的SQL连接的基础。在处理更大的数据选择时提供更好的灵活性。
答案 3 :(得分:0)
我会说很多元素可能会有所不同,但不会有两个元素。我更倾向于调整索引或查看表结构,以找到有价值的性能改进。