当前位置: 首页 > news >正文

MySQL 深度分页如何优化?

例如select * from t1 order by 10000, 10查询10000- 10010页数据,mysql会先查询出100010页,再抛弃100000。这个操作会产生大量的无用IO/CPU消耗

范围查询

1.当ID能保证连续无空缺时,可以使用范围查询。

select * from t1 where id > {seed_id} and id <= {seed_id + step} order by id;
select * from t1 where id > {seed_id} limit 10
子查询

我们先查询出 limit 第一个参数对应的主键值,再根据这个主键值再去过滤并 limit,这样效率会更快一些。

select * from t1 where id >= (select id from t1 limit {seed_id}, 1) limit {step};

不过这个方法虽然没有限制ID是连续的,但是限制了ID必须是正序的

inner join延迟关联

延迟关联和上面的子查询本质没有区别。

select * from t1
inner join (select id from t1 limit {seed_id}, 1) t2
on t1.id >= t2.id
limit {step};

比如查询10000~100010。那就先查询出10001

然后将主表t1与t2相连,仅仅保留t1.id大于等于t2.id的前10条数据

覆盖索引

相关文章:

  • 【Unity6打包Android】游戏启动的隐私政策弹窗(报错处理)
  • 从硬件定时器原理学会多任务调度
  • 筛选法找质数(信息学奥赛一本通-2040)
  • 陶陶摘苹果(信息学奥赛一本通-1103)
  • 46. HarmonyOS NEXT 登录模块开发教程(一):模态窗口登录概述
  • 操作系统高频面试题
  • 机器学习模型-从线性回归到神经网络
  • LuaJIT 学习(2)—— 使用 FFI 库的几个例子
  • 密码学研究热点
  • 城市客运安全员适合哪几类人报考
  • Vue中有什么组件可以实现轮播效果,每次出现四个元素?
  • 信号处理抽取多项滤波的数学推导与仿真
  • 【蓝桥杯速成】| 2.逆向思维
  • 【openGauss】物理备份恢复
  • C++28--特殊类设计
  • uv python包管理工具
  • 【算法】线段树的应用-力扣3479. 将水果装入篮子 III
  • 搭建阿里云专有网络VPC
  • go语言zero框架拉取内部平台开发的sdk报错的修复与实践
  • 硬件驱动——51单片机、LED、动态数码管
  • 来论|以法治之力激发民营经济新动能
  • 萨洛宁、康托罗夫、长野健……7月夏季音乐节来很多大牌
  • 牛市早报|年内首次存款利率下调启动,5月LPR今公布
  • 澎湃读报丨多家央媒刊文关注拧紧纪律的螺丝:强化监督推动过紧日子要求落到实处
  • 山西晋城一网红徒步野游线路据传发生驴友坠崖,当地已宣布封路
  • 淮安市车桥中学党总支书记王习元逝世,终年51岁