我在 mysql (InnoDB) 的 WHERE IN 子句中有一个包含长列表 (> 2000 ids) 的查询:
SELECT id
FROM table
WHERE user_id IN ('list of >2000 ids')
我尝试通过使用 INNER JOIN 而不是像这样的 where 来优化它(id 和 user_id 都使用索引):
SELECT table.id
FROM table
INNER JOIN users ON table.user_id = users.id WHERE users.type = 1
然而,令人惊讶的是,第一个查询速度要快得多(5 到 6 倍)。为什么会这样呢?当 where in 子句中的 id 数量变得更大时,第二个查询的性能是否会优于第一个查询?
最佳答案
这不是您问题的答案,但您可以用作第一个查询的替代方案,您可以通过将 IN
子句替换为 EXISTS
来更好地提高性能,因为 EXISTS
性能优于 IN
引用: Here
SELECT id
FROM table t
WHERE EXISTS (SELECT 1 FROM USERS WHERE t.user_id = users.id)
关于Mysql:为什么在这种情况下 WHERE IN 比 JOIN 快得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39773821/