MySQL 查询优化:IN() 与 OR

Posted

技术标签:

【中文标题】MySQL 查询优化:IN() 与 OR【英文标题】:MySQL query optimization: IN() vs OR 【发布时间】:2010-11-26 15:11:05 【问题描述】:

我一直在阅读,mysql 在使用 IN() 语句的查询方面存在问题 - 有时无法使用索引。如果我不使用子查询,真的是这样吗?

哪种方法更好?有性能差异吗?

1

SELECT *
FORM `somewhere`
WHERE 
  `id` = 3
   OR `id` = 5
   OR `id` = 15
   OR `id` = 56
   OR `id` = 34
   OR `id` = 47

2

SELECT *
FORM `somewhere`
WHERE 
  `id` IN (3,5,15,56,34,47)

【问题讨论】:

我认为这些在性能方面非常相似。据我了解,当 MySQL 解析 IN() 时,它会在内部将其转换为 OR... 【参考方案1】:

第二种方法更好。 MySQL 可以对此进行优化。

MySQL 在使用 IN() 语句的查询方面存在问题 - 有时无法使用索引。如果我不使用子查询,真的是这样吗?

当你写IN(SELECT ...) 时,IN 可能有问题,但我认为简单的值列表没有问题。

【讨论】:

【参考方案2】:

如果你真的想使用索引,你可以使用 UNION 在此处阅读更多内容mysql-followup-on-union-for-query-optimization-query-profiling

【讨论】:

以上是关于MySQL 查询优化:IN() 与 OR的主要内容,如果未能解决你的问题,请参考以下文章

or/in/union与索引优化

mysql 子查询 优化

mysql优化--in或者or选择

MySQL百万级数据表or查询优化

如何优化 MySQL 中的 IN 子查询?

mysql设计与优化