我想知道在性能方面有没有什么不同
SELECT ... FROM ... WHERE someFIELD IN(1,2,3,4)
SELECT ... FROM ... WHERE someFIELD between 0 AND 5
SELECT ... FROM ... WHERE someFIELD = 1 OR someFIELD = 2 OR someFIELD = 3 ...
或者,MySQL会以编译器优化代码的方式优化SQL吗?
编辑:出于评论中所述的原因,将AND
更改为OR
。
发布于 2011-10-19 16:44:08
我还为未来的谷歌人做了一个测试。返回结果总数为7264条(满分10000条)
SELECT * FROM item WHERE id = 1 OR id = 2 ... id = 10000
此查询耗时0.1239
秒
SELECT * FROM item WHERE id IN (1,2,3,...10000)
此查询耗时0.0433
秒
IN
比OR
快3倍
发布于 2009-04-23 19:13:21
这取决于您正在做什么;范围有多广,数据类型是什么(我知道您的示例使用了数字数据类型,但您的问题也可以适用于许多不同的数据类型)。
这是一个希望以两种方式编写查询的实例;让它正常工作,然后使用EXPLAIN找出执行差异。
我确信这个问题有一个具体的答案,但这就是我如何,实际上,找出我给定问题的答案。
这可能会有一些帮助:http://forge.mysql.com/wiki/Top10SQLPerformanceTips
致以敬意,
弗兰克
发布于 2011-03-14 22:54:03
我认为对search观察到的一种解释是,如果in语句中的值都是静态值,则MySQL实际上会对这些值进行排序,并使用二进制搜索,这比普通的OR替代方法更有效。我不记得我在哪里读到的,但圣汐的结果似乎是一个证据。
https://stackoverflow.com/questions/782915
复制相似问题