我正在尝试从包含几亿行的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)来降低要排序的行数,但没有成功。
请注意,我不太关心插入所需的时间(它仍然需要合理,但优先考虑选择),所以我打开了建议在插入时计算的解决方案。
提前致谢,
答案 0 :(得分:1)
此查询强制您查看表中的每一行。这就是花时间。
我几乎从不推荐这个,但在这种情况下,你可以在外部表中以非规范化的方式维护计数。
在通过触发器插入,更新和删除期间将值和计数放入另一个表中。
答案 1 :(得分:1)