我正在尝试从包含数亿行的SQLite表中检索一些最常出现的值。
到目前为止,查询可能如下所示:
SELECT value, COUNT(value) AS count FROM table GROUP BY value ORDER BY count DESC LIMIT 10
该value字段上有一个索引。
value
但是,使用ORDER BY子句,查询会花费很多时间,我从未见过它的结尾。
可以采取什么措施来大幅度改善对如此大量数据的此类查询? 我试图添加一个HAVING子句(例如:HAVING count> 100000)以减少要排序的行数,但是没有成功。
请注意,我不太在意插入所需的时间(它仍然需要合理,但是优先级会给予选择),因此我对建议在插入时进行计算的解决方案开放…
提前致谢,
1)创建一个新表,每个唯一的“值”和“ count”将在其中存储一行,在count列上放置一个降序索引 2)在原始表中添加一个触发器,在其中维护该新表(插图并更新)以增加/减少计数。 3)在此新表上运行查询,由于计数索引递减,该新表将快速运行