一尘不染

如何优化大多数出现的值(亿万行)的检索

sql

我正在尝试从包含数亿行的SQLite表中检索一些最常出现的值。

到目前为止,查询可能如下所示:

SELECT value, COUNT(value) AS count FROM table GROUP BY value ORDER BY count DESC LIMIT 10

value字段上有一个索引。

但是,使用ORDER BY子句,查询会花费很多时间,我从未见过它的结尾。

可以采取什么措施来大幅度改善对如此大量数据的此类查询?
我试图添加一个HAVING子句(例如:HAVING count> 100000)以减少要排序的行数,但是没有成功。

请注意,我不太在意插入所需的时间(它仍然需要合理,但是优先级会给予选择),因此我对建议在插入时进行计算的解决方案开放…

提前致谢,


阅读 207

收藏
2021-03-08

共1个答案

一尘不染

1)创建一个新表,每个唯一的“值”和“ count”将在其中存储一行,在count列上放置一个降序索引
2)在原始表中添加一个触发器,在其中维护该新表(插图并更新)以增加/减少计数。
3)在此新表上运行查询,由于计数索引递减,该新表将快速运行

2021-03-08