数据分页方案汇总
Table of Contents
技术服务于业务(产品),但技术不是万能的,所以有时也要根据技术更改业务(产品)。
最理想的方案 #
最理想的分页方案就是为用户提供一个分页器,让用户能够选择任意的页码进行跳转。
比如当我们在百度下搜索“分页”时,页面底部会出现一排分页按钮:
我们可以直接查看中间的数据,比如第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页的数据。
小结 #
除了关注性能,数据的完整性也需要考虑,比如用limit offset
的方式,就容易重复显示或者漏掉某些数据。