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

Ran*_*son 3 mysql sql query-optimization

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

select `name`
  from `users`
 where `ID` not in (select distinct `userID` from `userItem`)
Run Code Online (Sandbox Code Playgroud)

在MySQL服务器切断之前,此查询甚至不会完成执行.这里有一些我不知道的巨大低效率吗?

中有200,000条记录userItem和14,000条记录users.

查询结果来自查询:

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
Run Code Online (Sandbox Code Playgroud)

Dev*_*art 5

  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
Run Code Online (Sandbox Code Playgroud)