MySQL分页查询优化

MySQL分页写法

select * from employees_1 limit 10000,10;

  • 执行逻辑实际读取10010记录
  • 抛弃面前10000行
  • 读取后面需要10
  • 执行效率是比较低

1 自增主键分页查询优化

limit 90000,10查询

由于id自增连续并且没有其他过滤条件

因此可以改造sql优化查看id大于90000数据只查询10

可以观察效率提升还是很明显

对比执行计划下方SQL因为索引查询避免了全表扫描

然后上述情况需要严格满足如下条件

  • 主键自增连续
  • 查询接口按照主键排序
  • 没有其他过滤条件

日常开发以上要求还是比较严格很难满足

主键id不连续可以通过入参startId进行优化

当获取第一页直接获取limit 10

当前二页第一页最大id肯定能得到可以执行 where id>startId limit 10获取数据

当获取N依次类推

2 非主键排序分页查询优化

根据主键字段排序进行分页查询

此时不能索引并且要使用文件排序

可以优化试用索引找到所需要10数据id然后根据id关联查询需要数据

首先使用索引找打了需要10数据id,生成派生表e1

然后扫描e1关联id字段驱动查询e查询需要数据

执行效果来看执行耗时有很大提升

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值