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

MySQL 深度分页怎么优化?

引言

分页查询是数据库应用中常见的需求,不同的分页方式对性能影响显著。逐页翻页通过记录上次查询的最大ID,避免了大量的偏移扫描,适合顺序浏览;而基于页数的直接跳页查询则面临主键不连续和偏移量过大的性能瓶颈。本文将介绍这两种分页方式的实现方法及性能特点,帮助开发者根据业务场景选择更高效的分页策略。

逐页翻页

这种情况比较好处理,只需要记录上页中最大的id,然后下次查询时把max_id传给接口。

select * from your_table where id > max_id order by created limit 100;

输入页数翻页

不能依赖于排序字段是连续的,因为主键会有各种原因导致不连续(insert 报错导致自增键没回滚、insert select是逐渐递增的方式申请,2 4 8 16 32...)。

-- 方法一,通过子查询查出第10000000条数据id
SELECT * FROM your_table 
WHERE id > (SELECT id FROM your_table ORDER BY created LIMIT 1 OFFSET 10000000)
ORDER BY created LIMIT 10;
-- 方式二,直接分页查询
SELECT * FROM your_table ORDER BY created LIMIT 10000000, 10;

方式一的效率要高于方式二,方式一的子查询会使用rowId排序方式,可以在内存中加载更多的数据,找到第10000000条数据id更快。


感谢您的阅读!如果文章中有任何问题或不足之处,欢迎及时指出,您的反馈将帮助我不断改进与完善。期待与您共同探讨技术,共同进步!

http://www.xdnf.cn/news/5911.html

相关文章:

  • 基于 Spring Boot 瑞吉外卖系统开发(十三)
  • SpringBoot中的拦截器
  • 精简大语言模型:用于定制语言模型的自适应知识蒸馏
  • RobotxR1:通过闭环强化学习在大语言模型上实现具身机器人智能
  • 【Web应用】Vue 项目前端项目文件夹和文件介绍
  • 17.责任链模式:思考与解读
  • Mysql索引优化
  • State(状态)——对象行为型模式
  • 在scala中sparkSQL读入csv文件
  • 【AI提示词】贝叶斯分析专家
  • C语言编程--二叉树--构建解析树
  • iOS - 如何从appStore获取app版本信息
  • 各类芒果(果实、叶片、产量等)相关数据集
  • Python爬虫实战:研究JavaScript 环境补全逆向解密
  • SQLMesh信号机制详解:如何精准控制模型评估时机
  • CSS可以继承的样式汇总
  • 【言语】刷题3
  • 串口模块详细讲解
  • IO、存储、硬盘、文件系统相关常识
  • 【Bluedroid】蓝牙 HID DEVICE 初始化流程源码解析
  • 十天学会嵌入式技术之51单片机—day-9
  • 【技巧】使用UV创建python项目的开发环境
  • 面试篇:Spring Security
  • C语言—再学习(数据的存储类别)
  • C++ 字符格式化输出
  • python学习笔记七(文件)
  • 分布式链路跟踪
  • lubuntu 系统详解
  • WebpackVite总结篇与进阶
  • Java SpringMVC 和 MyBatis 整合项目的事务管理配置详解