分页查询慢的优化方式

大家好呀,我是柚子。这篇文章的起因呢,是因为项目中有一个分页查询比较慢的sql需要优化。
分页查询也是我们项目中经常使用的查询方式,那么如何优化呢?


案例

场景:表里有大量数据,一次性查询出来肯定会非常慢,那么考虑使用批量查询的方式。
方法一:根据分页和计算偏移量查询,如每200条分一次页,但是会存在一个问题。如果表里的数据量越大,这种方式会越慢,因为需要计算偏移量。
方法二:根据分页和主键查询,首先查出总记录数,再用总记录数算出分页页数,来循环取出数据。假如是倒序,用每次查出的最后一个主键id,小于这个主键id,每批向前取200条,这样就大大提高sql效率了。


提示:以下是本篇文章正文内容,下面案例可供参考

一、先定位偏移位置的 id,然后往后查询,适于 id 递增场景

select * from order where type=1 limit 100000,1;

第1条语句:3674ms

select id from order where type=1 limit 100000,1;

第2条语句:1315ms

select * from order where type=1 and
id>=(select id from order where type=8 limit 100000,1)
limit 100;

第3条语句:1327ms

select * from orders where type=1 limit 100000,100;

第4条语句:3710ms

从上面也是可以看出:
第1条直接select * 的话不走索引,会比较慢
第2条直接查询id,就走了索引,相对比较快
第3条虽然select *,但是先定位偏移位置的id,然后向后查询,也是比较快的

二、可以使用 id 限定优化

假设数据表的id是连续递增,则根据查询的页数和查询的记录数可以算出查询的id的范围,可使用 id between and:
sql如下(示例):

select *
from order
where type = 1
  and id between 1000000 and 1000100
limit 100;

总结

那么以上就是分页查询的优化方式了,小伙伴们可以采纳哦!


╭◜◝ ͡ ◜◝╮
( ˃̶͈◡˂ ̶͈ )感觉有用的话,欢迎点赞评论呀!
╰◟◞ ͜ ◟◞╯

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柚子猫屿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值