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

mysql深度分页

MySQL 解决深度分页(Deep Pagination)的核心思想是“丢掉 OFFSET,用条件定位起点”,从而避免大偏移量带来的全表扫描和大量回表。常见优化方案如下:


游标/范围分页(推荐)

原理:记住上一页最后一条记录的主键(或排序列),作为下一页的起始条件。
示例

-- 上一页最后一条 id = 100000
SELECT * FROM t_order
WHERE id > 100000        -- 无 OFFSET
ORDER BY id
LIMIT 10;
  • 优点:直接跳到100000,性能稳定,不随页码增大而衰减;千万级数据仍可毫秒级返回。

  • 缺点:只能顺序翻页,不能随机跳页;需要排序列唯一且连续。


 延迟关联(JOIN 子查询)

原理先用覆盖索引在子查询里拿到主键,再回表取完整行,减少大 OFFSET 的回表量。
示例

SELECT t1.*
FROM t_order t1
JOIN (SELECT idFROM t_orderWHERE create_time > '2023-01-01'ORDER BY create_timeLIMIT 4500000, 10) t2 ON t1.id = t2.id;
  • 优点:比直接 LIMIT 4500000,10 (该方法先数4500000条数据,然后丢掉,)少读 450w 行数据。

  • 注意:子查询里的列必须被索引覆盖,否则仍可能全表扫描。


覆盖索引 + 子查询定位起点

原理:先用覆盖索引查出第 N 条记录的排序列值,再用该值作为条件取后 10 条。
示例

-- 1. 查出第 4500000 行的 create_time
SELECT create_time
FROM t_order
ORDER BY create_time
LIMIT 4500000, 1;-- 2. 用该 create_time 作为起点
SELECT *
FROM t_order
WHERE create_time >= <上一步的值>
ORDER BY create_time
LIMIT 10;
  • 优点:避免大 OFFSET;支持非主键排序。

  • 注意:排序列必须有索引,否则第 1 步也会很慢。


预计算或缓存

  • 静态数据可提前算好页码结果,放入 Redis 或 ES,彻底避开 MySQL。

  • 动态数据可用异步任务把每页首条主键写入缓存,查询时直接 > 条件。

为什么深分页不建议用 limit offset,size

SELECT * FROM t_order LIMIT 4500000, 10;
  • MySQL 仍需扫描450万行然后扔掉,再取 10 行,耗时随 offset 线性增长。

  • 高并发下容易造成 CPU、IO、内存暴涨,甚至 OOM。


一句话总结:“深分页不用 OFFSET,用条件(where)定位起点” 是所有优化手段的核心。

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

相关文章:

  • C语言:结构体
  • 暄桐:唯有认真思考过死亡,才足以应对日常
  • Android开发-设计规范
  • 【LLM】强化学习训练框架(slime、verl框架)
  • 【代码随想录day 21】 力扣 216.组合总和III
  • CD73.【C++ Dev】map和set练习题1(有效的括号、复杂链表的复制)
  • Docker中Mysql容器忽略大小写
  • C语言————深入理解指针1(通俗易懂)
  • Linux-搭建NFS服务器
  • 【PyTorch】基于YOLO的多目标检测(一)
  • 【CNB.COOL】智能花卉分类系统 – 部署指北
  • 由题构造 嵌入汇编(汇编)
  • python调用豆包大模型给人脸生成卡通图像
  • 八大排序--快速排序
  • 福彩双色球第2025100期数据统计
  • hardhat 3 测试框架选择
  • linux系统学习(14.日志管理)
  • 华秋DFM检查PCB设计缺陷、一键导出Gerber、BOM、坐标文件
  • 第八章 光照
  • Qt QNetworkAccessManager 简述及例程
  • C++11——万能模板及完美转发
  • GMTapSDK 扩展使用文档
  • 【开题答辩全过程】以 基于springboot的垃圾分类管理系统为例,包含答辩的问题和答案
  • LSTM原理理解
  • 8.29学习总结
  • 大语言模型(LLM)简介与应用分享
  • Linux-数据库
  • 旅游景点库系统的设计与实现(代码+数据库+LW)
  • 力扣hot100:轮转数组(常规思路与三步反转讲解)(189)
  • mmaction安装的详细说明帖