分页技术在开发中是十分常见的,我刚到公司做的两个项目都用到了分页技术,于是就想着对分页技术进行深入的探索一下。
常见的几种分页方式:
- 扶梯方式
扶梯方式在导航上通常只提供上一页/下一页这两种模式,部分产品甚至不提供上一页功能,只提供一种“更多/more”的方式,也有下拉自动加载更多的方式,在技术上都可以归纳成扶梯方式。
扶梯方式在技术实现上比较简单及高效,根据当前页最后一条的偏移往后获取一页即可。写成SQL可能类似
SELECT * FROM LIST_TABLE WHERE id > offset_id LIMIT n;
- 电梯方式
另外一种数据获取方式在产品上体现成精确的翻页方式,如1,2,3……n,同时在导航上也可以由用户输入直达n页。国内大部分场景采用电梯方式,但电梯方式在技术实现上相对成本较高。
在MySQL中,通常提到的b-tree,在存储引擎实现上,通常都是b+tree。
使用电梯方式时候,当用户指定翻到第n页时候,并没有直接方法寻址到该位置,而是需要从第一楼逐个count,scan到count*page时候,获取数据才真正开始,所以导致效率不高。
传统分页技术(电梯方式)
首先前端需要传给你的分页实体,以及查询条件
//分页实体
struct FinanceDcPage{
1: i32 pageSize, //页容量
2: