我需要从表中选择一些列值等于列表中任何值的记录。
可以使用IN operator(如WHERE column IN (v1, v2, ...)
)或多个OR运算符(如WHERE column = v1 OR column = v2, ...
)来完成此操作。
我应该何时使用这两种方式之一?
答案 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查询更小(大小)并且更容易解析。