mysql - 为什么这个带有 NOT IN 语句的 MySQL 查询这么慢?

标签 mysql sql query-optimization

我有一个包含大量记录的数据库,我想找到没有存储用户项的用户:

select `name`
  from `users`
 where `ID` not in (select distinct `userID` from `userItem`)

这个查询在被 MySQL 服务器中断之前甚至不会完成执行。这里是否存在我不知道的巨大低效率?

userItem 中有 200,000 条记录,users 中有 14,000 条记录。

查询解释的结果:

1   PRIMARY users   ALL NULL    NULL    NULL    NULL    13369   Using where
2   DEPENDENT SUBQUERY  userItem    index   NULL    userID  8   NULL    189861  Using where; Using index; Using temporary

最佳答案

  1. 是否为 userItem.userID 和 user.ID 编制了索引?如果没有,请添加它们。
  2. 在 MySQL JOIN 子句中可能更快。

例如-

SELECT name
  FROM users u
  LEFT JOIN userItem ui
    ON ui.userID = u.ID
  WHERE ui.userID IS NULL

关于mysql - 为什么这个带有 NOT IN 语句的 MySQL 查询这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12728654/

相关文章:

mysql - 在 MySQL 的 where 子句中使用日期时间索引

MySQL - GROUP BY 更改结果

sql - 如何使用 Oracle 的 dbms_standard 包

批量插入命令中的MySQL错误,

mysql - 如何使用mysql连接两个属性相同但每个表中数据不同的表

MySQL 查询优化,用于按日期和状态对项目进行排序

php - 加速mysql查询

mysql - linux下如何将数据库导入mysql?

java - 如何在 MYSQL 数据库(日期数据类型)上设置 Null

php - 如何从表中选择数据并将其设为字符串?