mysql where 子句使用“IN”或多个“OR”


mysql where clause using 'IN" or multiple 'OR'

假设查询多个条件,

select AA.*,BB.* from AA left join BB on AA.key=BB.key 
where AA.key='red' or AA.key='green' or AA.key='blue' or AA.key='pink'

比较

select AA.*,BB.* from AA left join BB on AA.key=BB.key 
where AA.key IN ['red','green',blue',pink']

在 MYSQL 中,上述 2 个选项中的任何一个都比另一个更快吗?我知道使用"IN"更漂亮,但它的速度不同吗?(表格在"键"上有索引)

我看到了这篇文章,但没有关于速度的参考。

RJS IN 子句比 SQL 中的 Multiple OR 语句更快。

例如,如果您有 3 到 5000 条记录,则与多个 OR 语句相比,IN 查询将快 5(大约)倍。

改进它的真正最佳方法是将所需的键放在另一个带有索引的表中,并加入它:

Select AA.*, BB.*
From AA
Join KEYS using (key)
Left Join BB using (key)

MySQL将选择有关KEYS大小的最佳方式,并使其几乎即时。

一般来说,避免OR语句,它们倾向于以联合翻译,这在性能上不是那么好。

IN (...)OR窗体将生成相同的查询计划,但IN()窗体更易于分析,因此在解析器和优化器阶段花费的时间更少。