Mysql千万级数据快速分页查询方案

Mysql千万级数据快速分页查询方案

@(数据库)[mysql]

实际应用场景说明

服务器配置 : 阿里云 2核4G mysql服务器
生产场景 : 将mysql数据库中的文章数据进行批量化处理更新
问题详情: 当分页数过大时查询速度很慢
解决方法: 使用了between and 的方式来加快了查询速度

1.limit方法的局限性
select * from articles limit 100,500
> 查询0.06秒
  • limit是最常用的分页方法,它在执行过程中,相当于先遍历了前100个,然后取了第100到600个,舍弃了前100个.但是limit仅适用于小数据范围内的分页查询 小数据

    select * from articles limit 170500,500

    查询 193s

  • 当查询170500开始的500条数据时,因为要先查询前170500条数据,数据内容庞大,所以查询很慢

2.通过主键id过滤的方法
select * from articles where id >(select id from articles limit 170500,1) limit 500
> 查询 2.5s
  • 这种方法的好处是首先通过id索引快速定位到了分页数据的起始位置(避免了全文检索),并且用limit 方法快速获取了从起始位置往后的500个数据。
3.between and
select * from articles where id between (select id from articles limit 170000,1) and (select id from articles limit 170500,1)
> 查询 2s
  • 最优方法between and 前一种方法相当于是先利用id索引的优势快速定位到了分页的起始位置,然后往后截取了500条数据.between and的方法相当于也是利于id索引的优势,但是同时定位了分页的起始和终止的位置,截取了中间的信息,因此速度会更快.
  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值