MySQL查询优化:IN()vs OR

时间:2010-11-26 15:11:05

标签: mysql query-optimization

我一直在读,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)

2 个答案:

答案 0 :(得分:9)

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

  

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

当您编写IN(SELECT ...)时,IN可能存在问题,但我认为简单的值列表不存在问题。

答案 1 :(得分:2)

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