Skip to main content
  1. internet/

数据分页方案汇总

·690 words·2 mins·

技术服务于业务(产品),但技术不是万能的,所以有时也要根据技术更改业务(产品)。

最理想的方案 #

最理想的分页方案就是为用户提供一个分页器,让用户能够选择任意的页码进行跳转。

比如当我们在百度下搜索“分页”时,页面底部会出现一排分页按钮:

百度搜索分页页面

我们可以直接查看中间的数据,比如第4页的数据。

这在数据库查询时对应的语法为select xxx from table limit 10 offset 30;

缺点 #

在数据库查询中,尽管我们最终只查询了10条数据,但是这个过程中数据库会把前30条数据先查询出来再过滤。

如果数据量很大,比如有10w条数据,那么在查看最后几条数据的时候数据库就需要查询10w条数据出来,这会对数据库造成很大的压力,也会非常影响响应速度!

数据量超大的方案 #

去掉分页器 #

解决上述问题的一个方式是通过指定筛选条件,而不是指定offset来查询。

这时候的语法为:select xxx from table where id > last_id limit 10;

这样数据库就不会把大量的不必要数据查询出来了。

比如在查看微信的朋友圈时,微信不会提供分页器进行选择,而是通过不断下拉来获取下一批数据。

这种只能选择下一页的方式也可以展示为这样:

比特币交易记录的分页

被限制的分页器 #

有的时候确实需要分页器进行快速的跳转,这时候可以限制可以跳转的页数。

比如:每次只能以当前页为起点,查看后边的100页。

这种方式限制了数据库一次性查询大量的数据,同时又保证了用户可以快速跳转。

限制可查询的数量 #

也可以从业务上来解决技术问题,比如查询日志时,可以限制只能查询最近半年的日志。

github也采用了这个策略:限制查询100页的数据。

github的查询分页页面

小结 #

除了关注性能,数据的完整性也需要考虑,比如用limit offset的方式,就容易重复显示或者漏掉某些数据。