Mysql分页查询优化

前提都是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();

}

从上面可以看出这样的方法明显解决了上一个方法的缺陷,第一,每次分页只需要查询一次,第二,不存在重复查询的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值