// 方式一
List data = new ArrayList<>();
List> partition = Lists.partition(data, pageSize);
List list = partition.get(currPage - 1);
// 方式二
// 从第几条数据开始
int firstIndex = (currPage - 1) * pageSize;
// 到第几条数据结束
int lastIndex = currPage * pageSize;
data.subList(firstIndex, lastIndex);
缺点:数据量大的时候不能进行全量查询
使用limit进行查询
## 第2是偏移量 1是查询条数
select * from student limit 2,1
缺点:偏移量较大的时候近乎全量扫描
解决方案如下
## 原sql
SELECt a.empno,a.empname,a.job,a.sal,b.depno,b.depname
from emp a left join dep b on a.depno = b.depno order by a.id desc limit 4800000,25;
## 使用索引覆盖+子查询优化
SELECt a.empno,a.empname,a.job,a.sal,b.depno,b.depname
from emp a left join dep b on a.depno = b.depno
where a.id >= (select id from emp order by id limit 4800000,1)
order by a.id limit 25;
## 记住上次查询的末尾 局限性:需要根据唯一主键进行处理,并且分页查询连续查询下一页
SELECt a.id,a.empno,a.empname,a.job,a.sal,b.depno,b.depname
from emp a left join dep b on a.depno = b.depno
where a.id > 4800000
order by a.id limit 25;
降级策略:配置limit的偏移量和获取数一个最大值,超过这个最大值,就返回空数据
pagehelper等工具类,需要添加依赖,原理:拦截待执行的sql,然后重写sql
com.github.pagehelperpagehelper5.1.10
具体用法如下:
int pageSize = 10;
int pageNum = 1;
// 方法一
PageInfo