Rails kaminari 等分页时 count 大表太慢的时候,大家是如何处理的

as181920 · 2015年02月04日 · 最后由 hz_qiuyuanxin 回复于 2015年02月04日 · 3882 次阅读

如题,

时光流逝,人岁渐长,表也越来越大,翻页默认要 count,就越来越慢了。大家一般哪些处理方式?

比如取消总页数显示(无限下拉),但是后台大家还是习惯传统的分页显示。

select count(1) from tabs where 1=1;

我建议你评估这张表的数据规模及其增长速度,还有实际的功能需求。

对于经常使用的通过 offset limit,速度是相对比较慢的,当然这对于数据量小的表一般没有什么问题。 而对于数据规模稍微大的,像 rails 里每张表都会默认有个 id,那么毫无疑问,通过 where id > ? limit 的方式在记录数大的表里,在性能上的表现上是要远远优于 offset limit 的。

如果表很大,count 值没必要更新的太实时,也就是说可以用缓存 另外一个方案,就是维持一个约数就可以,没必要一定是某时刻的准确值 还有一种方案,就是超过 X 页后不让看,你的分页就一直是 1...1000 了

避免 count

分页是带查询条件的分页,不是全表分页

#2 楼 @hz_qiuyuanxin 实际数据大,处理慢查询。数据有删除的话,根据 id 计算是否会不准确?主要是 count 慢,不是取数据时候慢

#3 楼 @wuwx count 是 kaminari 这种库自己生成的,可以想办法用更好的语句复写,比如 cache 数据。或者作>1000 页不显示(这是 google 的做法吧)的话,如果只有 2 页,怎么判断要不要显示‘下一页’按钮

Thx

需要 登录 后方可回复, 如果你还没有账号请 注册新账号