news 2026/8/25 11:08:09

mysql深分页性能瓶颈根源分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
mysql深分页性能瓶颈根源分析

MySQL 深分页为什么慢?

LIMIT m,n会扫描并丢弃前 m 条数据,页码越大越慢。

怎么优化?

1️⃣ 建索引

2️⃣ 子查询先查 ID

3️⃣ 游标分页(id > 上页最大值

4️⃣ 业务限制最大页数

MySQL深分页性能下降的根本原因在于LIMIT offset, size语句的执行机制。其核心流程是:

limit 必须从头逐行扫描,然后跳过offset行。offset越大,无效扫描量线性上涨,性能就断崖式下跌。

具体来说,一个典型的深分页查询SELECT * FROM table ORDER BY id LIMIT 100000, 10;的执行过程如下:

  1. 通过索引(如主键索引)或全表扫描,定位到符合条件的数据起始位置。
  2. 顺序扫描前100,000条记录。
  3. 将这100,000条记录丢弃
  4. 返回接下来的10条记录。

这个过程导致了两个主要的性能瓶颈:

  • 巨大的无效I/O与CPU开销:即使只需要最后10条数据,引擎也必须读取、解析并丢弃前100,000条记录的所有数据页,造成了大量的磁盘I/O和CPU计算浪费。
  • 回表与锁竞争加剧:如果查询无法被覆盖索引完全满足,在通过二级索引定位到主键ID后,还需要进行大量的“回表”操作来获取完整行数据。在事务隔离级别较高(如RR)时,长时间扫描大量数据还可能加剧锁竞争,影响并发性能。

为了更清晰地对比不同优化方案的特性,下表汇总了主流解决方案:

优化方案核心原理是否支持跳页性能影响适用场景
游标分页 (Cursor-based)使用WHERE id > last_max_id LIMIT size,避免OFFSET⭐⭐⭐⭐⭐ (最优)无限滚动、连续翻页(如App信息流)。
延迟关联 (Deferred Join)子查询先利用覆盖索引快速获取目标页的主键ID,再通过JOIN回表取数据,减少回表量。⭐⭐⭐⭐ (很好)中大型表,排序字段有索引,且需要支持跳页。
覆盖索引优化创建包含所有查询字段的覆盖索引,使查询仅扫描索引即可完成,避免回表。⭐⭐⭐⭐ (很好)查询字段较少,可以建立覆盖索引的场景。
业务层限制产品层面限制可查询的最大页码或深度(如只允许查前100页)。⭐⭐⭐⭐⭐ (最优)所有分页场景,作为兜底方案。

代码示例:延迟关联优化
将原始的低效深分页查询:

-- 原始低效查询 SELECT * FROM `order` ORDER BY create_time DESC LIMIT 100000, 10;

优化为延迟关联查询:

-- 优化后的延迟关联查询 SELECT o.* FROM `order` o JOIN ( SELECT id -- 子查询只选取主键ID,利用(create_time, id)索引高效定位 FROM `order` ORDER BY create_time DESC LIMIT 100000, 10 ) AS t ON o.id = t.id; -- 通过主键快速关联回表获取完整数据

此优化利用了(create_time, id)联合索引的有序性,子查询可以快速地在索引树上定位到第100000条记录之后的位置,只读取10个ID,然后通过主键精准回表,极大地减少了需要扫描和回表的数据量。


参考来源

  • mysql深分页问题
  • 实战!如何解决 MySQL 深分页问题
  • 实战!如何解决 MySQL 深分页问题
  • MySQL深分页详解与优化实践
  • 关于MySQL深分页的问题及优化方案
  • MySQL-深分页问题的背景和影响
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/25 11:06:44

Gemini怎么生成word文档?AI导出鸭一键排版,告别复制乱码

关键词补充 AI内容结构化、多格式兼容、混合排版保真、跨端协同导出、智能模板映射 引言 用Gemini生成了一篇精彩的分析报告、方案或学习笔记,但当你试图把它变成一份规范的Word文档时,复制粘贴后的格式错乱、表格丢失、配图移位、中英文混排断行……这些…

作者头像 李华
网站建设 2026/8/25 11:04:23

基于POMDP与强化学习的临床诊断AI:解决医疗AI落地最后一公里难题

1. 从理想实验室到嘈杂诊室:临床诊断AI的“最后一公里”难题如果你关注过医疗AI的发展,可能会发现一个有趣的现象:很多在论文里表现惊艳的模型,一旦放到真实的医院场景里,表现就大打折扣。这背后的核心矛盾&#xff0c…

作者头像 李华
网站建设 2026/8/25 11:00:44

前端URL安全白名单机制:从原理到OpenClaw项目实战

1. 项目概述:从一行代码看一个安全理念如果你在维护一个前端项目,尤其是涉及用户上传、内容展示或者任何需要处理外部资源链接的场景,你大概率会碰到一个头疼的问题:如何安全地处理这些五花八门的URL?直接信任用户输入…

作者头像 李华
网站建设 2026/8/25 10:59:55

2026七类网线口碑好的品牌有哪些?行业工程端真实口碑盘点

数字化基建持续推进背景下,万兆网络成为智慧园区、三甲医院、轨道交通、大型数据中心的基础建设标准,七类网线凭借 800MHz 高带宽、双层全域屏蔽、长期稳定传输的核心特性,成为高端综合布线工程的核心传输主材。对于弱电设计师、系统集成商、…

作者头像 李华
网站建设 2026/8/25 10:58:17

龙虾经济思想实验:当经济学法则遭遇无意识行为体

1. 项目概述:一个思想实验的诞生那天晚上,我和几个朋友在吃小龙虾,桌上堆满了虾壳,大家聊着各自工作的烦心事。有人抱怨加班,有人吐槽消费降级,突然一个念头冒了出来:如果这些龙虾能替我们去上班…

作者头像 李华
网站建设 2026/8/25 10:58:09

AI协作实战:从翻车到高效,我的Claude Teammate中医游戏开发心法

1. 项目缘起:当“中医游戏”遇上“AI队友”最近,我一直在琢磨怎么把传统的中医知识用更现代、更有趣的方式呈现出来。作为一个对游戏开发和AI应用都挺感兴趣的人,我自然想到了用游戏化的方式来科普中医。想法很简单:设计一个互动游…

作者头像 李华