Mysql:为什么在这种情况下 WHERE IN 比 JOIN 快得多?

标签 mysql performance

我在 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/

相关文章:

mysql - 如何记录特定数据库的mysql慢查询

php - 从数据库中的每个用户检索最后插入的行

php - JSON 输出重音问题

python - 有效比较两个不同大小的数组

c++ - 为什么 map::operator[] 设计缓慢?

使用 Symfony2 表单组件的性能问题

javascript - 如何阻止HTML代码运行?

php - 使用php5进行mysql数据备份

mysql - 是否有可能,如果可以,如何将 "link"两个 MySQL 数据库列放在两个不同的表中?

java - 没有合适的驱动程序连接到使用 java 的 mysql 数据库 web 主机