sqlite查询没有完成 - 索引不好,或者数据太多了?

时间:2015-01-01 19:32:37

标签: sql sqlite indexing

我在SQLITE中有两个表:from_originalfrom_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万条记录:

rowcounts

我在所有idtimestamp字段上定义了索引(请参阅帖子末尾的架构),但explain query plan仅表示将使用其中一个id索引。

explain query plan

这是表模式,包括索引定义:

schema

1 个答案:

答案 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的数据,但这可能会在有限的时间内完成。