2010-08-18 307 views
0

我有一组需要在mysql中进行比较的大值。使用IN或OR进行mysql优化

我可以知道哪个更快吗? 例如:

Opt 1: 
SELECT * FROM table WHERE v = 1 or v = 2 or v = 3 or v = 4 or... v = 100 

Opt 2: 
SELECT * FROM table WHERE v IN (1,2,3,4,5,6,7,8,...,100) 

我可以知道哪个选项对于大值更快?有没有更好的解决方案?谢谢。

回答

1

假设数字将不是连续,所述IN子句是优选的,原因有二:

  1. 更多可读
  2. 优化运行比OR语句更快。
+0

IN列表已排序,因此查找可以作为二分查找完成。一堆OR只是一次评估每个条件一个 ,直到一个匹配:http://lists.mysql.com/mysql/216945 – 2010-08-18 21:13:17

2

这些都是连续的数字吗?然后,我会用

SELECT * FROM table WHERE v BETWEEN 1 AND 100 
+0

不,我们假设它们不是连续的。 – davidlee 2010-08-19 03:46:09

+0

@benmsia你的例子只是建议它们是连续的,在这种情况下,中间值比枚举100个数快得多,因为引擎只需执行一次范围检查而不是100次比较。 如果有差距,请参阅OMG Ponies的答案。 – Frank 2010-08-19 07:03:34

0

当我在学习数据库我的导师告诉我,他们有效地归结为同样的事情。

+0

从逻辑上说,是的,它们是等效的。但是优化器通常在IN和OR中更好地工作。 – 2010-08-18 21:08:14

+0

好点。我想我当时并没有专门谈论速度问题。 – 2010-08-18 21:14:37