Mysql数据库分页查询及优化

        最近遇到个数据库分页查询问题,mysql数据库分页查询默认是升序查询,就是第一页查询的是最先插入的数据,最后一页才是最新插入的数据,弄了个小的数据库表单,记录下我的操作过程,还有优化查询速度的方法。

       假设我的数据库里的表名为WHITELISTDATA,数据一共有13条,每页要求显示10条数据 

1、一般分页查询方法:

第一页:

select * from WHITELISTDATA order by id limit 0,10

备注:假如前端传入page=1,size=10,表示后端需要返回第一页数据,该页最大显示10条
上面的命令的最后两个数字0和10是传入的参数
0  =(page-1)*size
10 = size

备注:limit后面的0是页数减1然后乘以每页显示数量10,limit的详细的分页知识可以自行再另外查询资料

查询第二页:

select * from WHITELISTDATA order by id limit 10,10

2、优化查询方法(利用子查询进行优化查询)

查询第一页方法:

select * from WHITELISTDATA where id >= (select id from WHITELISTDATA order by id limit 0,1) limit 10;

查询第二页方法:

select * from WHITELISTDATA where id >= (select id from WHITELISTDATA order by id limit 10,1) limit 10;

备注:

优化的数据库查询当数据在上万情况下第二种方法比第一种方法快好几倍的查询速度

在此我大概解释下优化提速的原因:普通方法查询的时候会遍历数据库的每行和每列数据,全部都要读一遍,所以数据上万条了,键值又多的话会慢的不行。

优化用的子查询方法就要稍微好点,他首先是通过这条语句《select id from WHITELISTDATA order by id limit 0,1》查询到分页查询的那个ID值,不是遍历每行每列数据,耗时少,然后再根据这条语句《select * from WHITELISTDATA where id >= 》查询ID值大于上面查询出来的那个ID值得数据即可,所以遍历的数据就只有10条数据,所以当数据量很大的时候查询速度会快很多。

3、降序查询

上面的查询方式都是通过ID的升序查询,所以在分页查询的时间,新添加的数据会被放到最后一页,有些需求是最新添加的数据需要放在最前面,保证用户方便查看,所以此时需要降序查询,数据库查询默认情况下是升序查询,降序查询需要修改一些参数,本质就是加一个desc参数。

普通方法的降序查询

降序查询第一页数据方法

select * from WHITELISTDATA order by id desc limit 0,10

降序查询第二页数据方法

select * from WHITELISTDATA order by id desc limit 10,10;

优化降序查询方法:

优化降序查询第一页数据方法

select * from WHITELISTDATA where id <= (select id from WHITELISTDATA order by id desc limit 0,1) order by id desc limit 10;

优化降序查询第二页数据方法

select * from WHITELISTDATA where id <= (select id from WHITELISTDATA order by id desc limit 10,1) order by id desc limit 10;

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值