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

时间:2011-09-07 13:48:27

标签: java sql sqlite optimization query-optimization

我正在尝试从包含几亿行的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)来降低要排序的行数,但没有成功。

请注意,我不太关心插入所需的时间(它仍然需要合理,但优先考虑选择),所以我打开了建议在插入时计算的解决方案。

提前致谢,

2 个答案:

答案 0 :(得分:1)

此查询强制您查看表中的每一行。这就是花时间。

我几乎从不推荐这个,但在这种情况下,你可以在外部表中以非规范化的方式维护计数。

在通过触发器插入,更新和删除期间将值和计数放入另一个表中。

答案 1 :(得分:1)