首页 > 解决方案 > 如何索引不在另一个表中的值

问题描述

我需要找到在一个表中但不在另一个表中的所有 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 毫秒才能运行。

是什么导致查询运行如此缓慢,有什么建议可以加快速度吗?

标签: sqlsqlitequery-performance

解决方案


您可以将 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;

我相信这会更快。


推荐阅读