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的主要内容,如果未能解决你的问题,请参考以下文章