Optimization 计算独特事件的有效方法?

Optimization 计算独特事件的有效方法?,optimization,sqlite,query-optimization,Optimization,Sqlite,Query Optimization,我有一个数据库表,其中包含对项目的更新(项目id、更新时间、键、值)。我想知道每个项目更新了多少次。我目前的查询是: SELECT item_id, count(*) FROM (SELECT DISTINCT item_id, updated_time FROM updates) GROUP BY item_id; 问题是它运行得很慢。我的表有2451个项目和大约800万次更新,数据库目前只覆盖一天。我有项目id、更新时间和(项目id,更新时间)的索引 我可以让这个查询在sqlite中运行得

我有一个数据库表,其中包含对项目的更新
(项目id、更新时间、键、值)
。我想知道每个项目更新了多少次。我目前的查询是:

SELECT item_id, count(*)
FROM (SELECT DISTINCT item_id, updated_time FROM updates)
GROUP BY item_id;
问题是它运行得很慢。我的表有2451个项目和大约800万次更新,数据库目前只覆盖一天。我有
项目id
更新时间
(项目id,更新时间)
的索引


我可以让这个查询在sqlite中运行得更快吗?移动到不太“精简”的位置会有帮助吗?

子查询会阻止外部查询中的索引优化。 使用单个查询,如下所示:

SELECT item_id,
       count(DISTINCT updated_time)
FROM updates
GROUP BY item_id
对于足够新的SQLite版本,这将从覆盖索引运行(使用
解释查询计划检查)