常见的两种分页方式对比

800 阅读1分钟

前言

在日常项目中我们经常遇到分页的场景,作为一个经验丰富的coder应该知道怎么选择合适的方案,本文中笔者列列举两种常见的分页方案,并阐述各自利弊,供大家参考

需求场景

某某页面需要展示数据列表,要求分页,每页5条数据,按照id倒序排列

实现方案

方案一:pageIndex、pageSize结合数据库limit进行分页

说明:

pageIndex:页码(改变页码值即可查询对应页码数据)

pageSize:每页条数

sql:

select * from db order by id desc limit ( ${pageIndex} - 1 ) * ${pageSize} , ( ${pageIndex} * ${pageSize} )

优缺点:

常用于管理后台(toB)的分页场景,可以实现向前先后翻页,也可以跳页,缺点是在翻页过程中如果出现数据的增加或删除,可能会造成列表数据的重复或遗失

方案二:lastId、pageSize结合数据库limit进行分页

说明:

lastId:上一页最后一条数据对应的id(第一页传空,不进行id条件对比)

pageSize:页码

sql:

-- 第1页
select * from db order by id desc limit pageSize
-- 第N页
select * from db where id < ${lastId} order by id desc limit pageSize

优缺点:

常用于app(toC)的feed流场景,只能实现向后翻页和下拉刷新,但在数据增加或删除时没有方案一数据重复或遗失的问题

总结

白猫黑猫,能抓住老鼠就是好猫

方案没有绝对的好与坏,我们需要了解的是每个方案有哪些优和不足,适合哪种场景,因地制宜的选用合适的方案才能事半功倍解决问题