我一直在读,MySQL对使用IN()语句的查询有问题 - 有时索引无法使用。如果我不使用子查询,那真的是这样吗?
哪种方法更好?是否有性能差异?
SELECT *
FORM `somewhere`
WHERE
`id` = 3
OR `id` = 5
OR `id` = 15
OR `id` = 56
OR `id` = 34
OR `id` = 47
SELECT *
FORM `somewhere`
WHERE
`id` IN (3,5,15,56,34,47)
答案 0 :(得分:9)
第二种方法更好。 MySQL可以对此进行优化。
MySQL使用IN()语句的查询存在问题 - 有时无法使用索引。如果我不使用子查询,那真的是这样吗?
当您编写IN(SELECT ...)
时,IN可能存在问题,但我认为简单的值列表不存在问题。
答案 1 :(得分:2)
如果您真的想使用索引,可以使用UNION在此处阅读更多内容mysql-followup-on-union-for-query-optimization-query-profiling