前提都是uid是唯一的且单调增的
1.利用pagenum来分页
select * from uc_members where (safety=-1 or safety=-2) and uid > pagenum *10 limit1000;
存在一个问题 pagenum 如何确定,使用select count(1) 进行统计然后在for循环传入pagenum实现分页效果,那在for循环中如果遇到新增的数据怎么办?难道for到最后一个在去select count(1) 一下,如果两个不一致就进行for? 这样的确可以但是多次查询效率很低耶,我们目的不就是优化吗?但是同时如果uid可能中间是删除了一些数据,那么在这个区间内会存在重复查询的问题。
2.利用uid来分页
int uid =0;//(这里是并不是可运行代码,只是为了更直观的解释,一开始是让uid为0)
while(true){
//这里是查询出来为空的时候就是最后一次,就break循环
if(sql.getuid()==null){
break;
}
//这里是去执行sql语句后的信息传入了sql中
sql = select * from uc_members where (safety=-1 or safety=-2) and uid > #{uid} limit1000;
//把这次查询出来最后一个uid重新赋值给uid
uid = sql.get(sql.size() - 1).getuid();
}
从上面可以看出这样的方法明显解决了上一个方法的缺陷,第一,每次分页只需要查询一次,第二,不存在重复查询的问题