sqlite 查询未完成 - 索引错误或数据过多?
sqlite query does not complete - bad index, or just too much data?
我在 SQLITE 中有两个 table: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
table每个人都有大约 400 万条记录:
我在所有 id
和 timestamp
字段上定义了一个索引(请参阅 post 末尾的架构),但 explain query plan
仅指示其中一个将使用 id 索引。
这是 table 架构,包括索引定义:
这是您的查询:
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 数据,但这可能会在有限的时间内完成。
我在 SQLITE 中有两个 table: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
table每个人都有大约 400 万条记录:
我在所有 id
和 timestamp
字段上定义了一个索引(请参阅 post 末尾的架构),但 explain query plan
仅指示其中一个将使用 id 索引。
这是 table 架构,包括索引定义:
这是您的查询:
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 数据,但这可能会在有限的时间内完成。