MySQL 百万级数据量分页查询方法及其优化

https://www.huaweicloud.com/articles/7cb1402c2d18baedfa12dd610ff2eaac.html

在使用Mybatis时,最头痛的就是写分页了,需要先写一个查询count的select语句,然后再写一个真正分页查询(limit)的语句https://blog.csdn.net/Agly_Clarlie/article/details/53185750
猜想结合pagehelper会容易 但是怎么结合呢? 有前端的从前端发送pageNum pageSize的我会 name无前端的呢

无前端 单纯想要批量查询 结合pagehelper如何使用 ?
参考了这个https://blog.csdn.net/a_c_c_a/article/details/106060621 可以通过pageInfo.getPages()得到总页数 结束pageNum的遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int pageNum = 1;
int pageSize =500;

while(true) {

PageHelper.startPage(pageNum, pageSize); // TODO 不count的话下面就得不到pageInfo.getTotal()
List<Machine> machineListPart = machineDao.getMachineAll();
PageInfo<Machine> pageInfo = new PageInfo<>(machineListPart);
System.out.println(
" 当前页数["+pageNum
+"],页大小["+pageInfo.getPageSize()
+"],总页数["+pageInfo.getPages()
+"],总记录数["+pageInfo.getTotal()+"]"
);

if(pageInfo.getPageNum()>=pageInfo.getPages()){
break;
}
pageNum++;

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
网元参数迁移 当前页数[1],页大小[10000],当页大小[10000],总页数[105],总记录数[1040376]
网元参数迁移 当前页数[2],页大小[10000],当页大小[10000],总页数[105],总记录数[1040376]
网元参数迁移 当前页数[3],页大小[10000],当页大小[10000],总页数[105],总记录数[1040376]
网元参数迁移 当前页数[4],页大小[10000],当页大小[10000],总页数[105],总记录数[1040376]
网元参数迁移 当前页数[5],页大小[10000],当页大小[10000],总页数[105],总记录数[1040376]
网元参数迁移 当前页数[6],页大小[10000],当页大小[10000],总页数[105],总记录数[1040376]
网元参数迁移 当前页数[7],页大小[10000],当页大小[10000],总页数[105],总记录数[1040376]
网元参数迁移 当前页数[8],页大小[10000],当页大小[10000],总页数[105],总记录数[1040376]
网元参数迁移 当前页数[9],页大小[10000],当页大小[10000],总页数[105],总记录数[1040376]
网元参数迁移 当前页数[10],页大小[10000],当页大小[10000],总页数[105],总记录数[1040376]
...
网元参数迁移 当前页数[100],页大小[10000],当页大小[10000],总页数[105],总记录数[1040376]
网元参数迁移 当前页数[101],页大小[10000],当页大小[10000],总页数[105],总记录数[1040376]
网元参数迁移 当前页数[102],页大小[10000],当页大小[10000],总页数[105],总记录数[1040376]
网元参数迁移 当前页数[103],页大小[10000],当页大小[10000],总页数[105],总记录数[1040376]
网元参数迁移 当前页数[104],页大小[10000],当页大小[10000],总页数[105],总记录数[1040376]
网元参数迁移 当前页数[105],页大小[10000],当页大小[376],总页数[105],总记录数[1040376]

但是上述pagehelper也是通过limit简单实现

可以利用索引

1
2
3
4
5
6
7
8
9
10
11
12



int pageIdIndex=0;
int pageSize=100;
int totalNum=machineDao.getMachineNum();
while(true) {
List<Machine> machineListPart = machineDao.getMachineAllBetter(pageIdIndex,pageSize);
pageIdIndex+=pageSize;
if (pageIdIndex>totalNum)
break;
}

未完待续