当前位置: 首页 > 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条数据

覆盖索引
http://www.dtcms.com/a/66916.html

相关文章:

  • 【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、动态数码管
  • C# Unity 唐老狮 No.9 模拟面试题
  • 网络安全与七层架构
  • SQL子查询与MyBatis映射
  • plantuml画甘特图gantt
  • AUTOSAR_CP_EthernetSwitchDriver
  • rpc grpc
  • C语言零基础入门教程:操作系统原理(上)
  • 火山引擎云上实战:一键部署 DeepSeek 大模型(蒸馏版)
  • 【工具】ReConPlot一个可视化和解释基因组重排的R包
  • AutoGen学习笔记系列(十六)Examples - Company Research