我在SQLITE中有两个表:from_original
和from_binary
。我想LEFT OUTER JOIN来提取from_original
中不存在的from_binary
中的记录。问题是我写的查询没有完成(我在大约1小时后终止了它)。谁能帮助我理解为什么?
我为查询中的每个字段定义了索引,但explain query plan
仅提及将引用其中一个索引。我不确定这是不是问题,或者只是数据太多了。
以下是我要尝试运行的查询:
select * from from_original o
left outer join from_binary b
on o.id = b.id
and o.timestamp = b.timestamp
where b.id is null
每张表都有大约400万条记录:
我在所有id
和timestamp
字段上定义了索引(请参阅帖子末尾的架构),但explain query plan
仅表示将使用其中一个id索引。
这是表模式,包括索引定义:
答案 0 :(得分:1)
这是您的查询:
select o.*
from from_original o left outer join
from_binary b
on o.id = b.id and o.timestamp = b.timestamp
where b.id is null;
(注意:您不需要b
中的列,因为它们都应为NULL
。)
此查询的最佳索引是from_binary(id, timestamp)
上的综合索引。你做有很多SQLite的数据,但这可能会在有限的时间内完成。