【发布时间】:2011-10-31 22:39:53
【问题描述】:
我需要做一个检查列值是 2117 还是 0 的请求。
目前,我使用 OR 进行此操作
select [...] AND (account_id = 2117 OR account_id = 0) AND [...]
由于我面临性能问题,我一直在徘徊是否会更好
select [...] AND account_id IN (0, 2117) AND [...]
Explain 命令在这两种情况下给出了相似的结果。所以,也许它更多的是关于优化解析阶段而不是其他任何事情。或者也许这两种方式是完全等价的,并且被 mySQL 优化掉了,我不应该在意。
在 mySQL 网站上,他们这样谈论 OR 优化:
使用 x = ANY(包含 (1,2) 的表)而不是 x=1 OR x=2。
但我没有正确理解语法,甚至不明白为什么。
你怎么看?
【问题讨论】:
-
据我记得,MySQL 中基于规则的查询优化应该将第一个和第二个查询转换为相同的结构,所以我根本不期望这方面有什么大的改进。
标签: mysql performance optimization request