如何索引不在另一个表中的值
Posted
技术标签:
【中文标题】如何索引不在另一个表中的值【英文标题】:How to index for values that are not in another table 【发布时间】:2018-11-08 19:53:34 【问题描述】:我需要找到在一个表中但不在另一个表中的所有 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
,(用于table1
)和table2
的普通索引。
关于如何加快查询速度的任何建议?
我在 table1
中有 ~200000 条记录,在 table2
中有 ~200 万条记录,查询运行大约需要 500 毫秒。
是什么导致查询运行如此缓慢,有什么可以加快速度的建议吗?
【问题讨论】:
500 毫秒来比较两个表的整体对我来说似乎很快。 您正在扫描两个包含大量数据的表。正如 Gordon 指出的那样,500 毫秒对于此类查询来说已经足够快了。 【参考方案1】:您可以将LEFT JOIN
与table2.ID IS NULL
的WHERE
子句一起使用:
SELECT table1.ID
FROM table1 LEFT JOIN table2 ON table1.ID = table2.ID
WHERE table2.ID IS NULL;
我相信这会更快。
【讨论】:
以上是关于如何索引不在另一个表中的值的主要内容,如果未能解决你的问题,请参考以下文章