我有一个包含大量记录的数据库,我想找到没有存储用户项的用户:
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
最佳答案
- 是否为 userItem.userID 和 user.ID 编制了索引?如果没有,请添加它们。
- 在 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/