什么时候应该在MySQL中使用IN运算符而不是多个OR运算符?

时间:2010-07-04 16:00:23

标签: mysql performance operators

我需要从表中选择一些列值等于列表中任何值的记录。

可以使用IN operator(如WHERE column IN (v1, v2, ...))或多个OR运算符(如WHERE column = v1 OR column = v2, ...)来完成此操作。

我应该何时使用这两种方式之一?

4 个答案:

答案 0 :(得分:4)

没有任何好处,MySQL会在解析和优化此查询时将IN-Clause转换为这些或者语句;)
IN()仅用于更短且更易读的查询,尽可能使用它。

答案 1 :(得分:2)

OR必须在小列表上更快,因为如果找到匹配,mysql将不会进一步检查。当你使用IN时,mysql在IN参数之间执行二进制搜索。因此,IN在大型价值列表上会更快。

答案 2 :(得分:1)

正如Tobias P.所说,IN子句使得查询更具可读性(因此代码更易于维护)。使用子查询时,这种增加的可读性可能是最明显的:

WHERE column in (SELECT column FROM table WHERE x=4 AND y='some string' AND ...)

要直接回答您的问题,请在使查询更具可读性时使用IN子句。

答案 3 :(得分:1)

使用IN。更具可读性和更好的性能。 如果OR太多,无论如何优化器都会将其转换为IN查询。另外,与OR查询相比,IN查询更小(大小)并且更容易解析。