mysql - 将 MySQL 查询从用户名更改为电子邮件会导致超时
问题描述
如果我运行此代码检查userid
,我会在 1 秒内得到结果
SELECT userid, username, email
FROM db_main.users
WHERE userid NOT IN
(
SELECT userid
FROM db_backup.user
);
如果我将其更改为username
,我仍然会在 1 秒内得到结果
SELECT userid, username, email
FROM db_main.users
WHERE username NOT IN
(
SELECT username
FROM db_backup.user
);
但是,如果我将其更改为email
,则查询将在 30 秒后超时。
SELECT userid, username, email
FROM db_main.users
WHERE email NOT IN
(
SELECT email
FROM db_backup.user
);
任何想法为什么?谢谢!
解决方案
首先,不要使用NOT IN
. 你可以NOT EXISTS
改用。
SELECT userid, username, email
FROM db_main.users u
WHERE NOT EXISTS
(
SELECT email
FROM db_backup.user b
WHERE b.email = u.email
);
注意:搜索如何email
在两个user
表中创建索引和创建索引。还搜索为什么我不应该使用NOT IN
. 它会导致错误的结果NULL
。
推荐阅读
- flutter - Flutter 网页上的 Index.html
- r - 有了这些等式,如果我们知道一年内每个部门工作的初始人数,我们就可以估计下一年的人数
- sql-server - 为什么我的应用程序 docker 没有连接到我的数据库 docker?
- python - 使用 .fillna 将一列中的 NA 值替换为另一列中的值
- rabbitmq - 磁盘满后的 RabbitMQ 恢复队列
- java - 如何从android studio中的recycler视图将数据添加到SQLite数据库中
- java - 生成像素样式真实类型字体的位图(Java.awt)
- angular - 为什么选项/标志在我的角度 CLI 上不起作用?
- react-native - React Native - 如果数组中的所有内容都包含
- python - django和django rest框架的区别