sql - 如何索引不在另一个表中的值
问题描述
我需要找到在一个表中但不在另一个表中的所有 ID。
我的简单选择是:
SELECT ID
FROM Table1
WHERE ID NOT IN (SELECT id FROM Table2)
但是,如果我这样做,EXPLAIN QUERY PLAN
我会得到
"0"|"0"|"0"|"SCAN TABLE Table1"
"0"|"0"|"0"|"USING INDEX index_Table2_id FOR IN-OPERATOR"
我的两个表都id
定义为id integer PRIMARY KEY
, (for table1
) 和table2
.
关于如何加快该查询的任何建议?
我有 ~200000 条记录table1
和 ~200 万条记录table2
,查询大约需要 500 毫秒才能运行。
是什么导致查询运行如此缓慢,有什么建议可以加快速度吗?
解决方案
您可以将 aLEFT JOIN
与 的WHERE
子句一起使用table2.ID IS NULL
:
SELECT table1.ID
FROM table1 LEFT JOIN table2 ON table1.ID = table2.ID
WHERE table2.ID IS NULL;
我相信这会更快。
推荐阅读
- json - recaptcha 响应中的前导符号“)]}'”是什么
- python - 在 Mac 上更新 python 版本
- python - KivyMD 与 plyer Filechooser - 如何获取目录的路径?
- ios - 当我在 ios 模拟器上运行我的颤振项目时出现此错误:-ProcessException:进程超时:
- sql - 根据唯一记录 postgres 将一列从一个 sql 表传输到另一列
- c# - Unity Run 功能在按钮单击事件后连续运行
- blazor - Blazor 服务器端应用程序在文件下载后死机
- python - Google OR-Tools - 找到最佳小组作业
- java - com.mongodb.MongoSocketOpenException:异常打开套接字
- javascript - 链式 AJAX 调用在 PHP 脚本中给出“注意:未定义索引”错误