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

时间:2014-12-12 11:29:00

标签: php mysql

假设查询多个条件,

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中,上面两个选项中的任何一个都比另一个快吗? 我知道使用' IN"更漂亮,但速度不同吗? (这些表的索引在'键')

我看到了this帖子,但没有关于速度的参考。

3 个答案:

答案 0 :(得分:0)

改进它的最佳方法是在另一个带索引的表中使用所需的键,并加入它:

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

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

一般来说,避免使用OR语句,它们往往会在联合中翻译,而这些并不是很好。

答案 1 :(得分:0)

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

例如,如果你有3到5千条记录,那么与多重OR语句相比,IN查询将比其快5(大约)时间。

答案 2 :(得分:0)

IN (...)OR表单将生成相同的查询计划,但IN()表单更易于解析,因此在解析器和优化程序阶段花费的时间更少。< / p>