MySQL 深分页查询优化实践与经验总结

在企业级项目中,深分页查询经常会成为性能瓶颈。本篇文章总结了我在实践中优化深分页 SQL 的经验,包括执行计划分析、索引优化、游标分页改写等内容。


一、问题场景

假设我们有一张订单表orders,包含字段:

id, user_id, status, total_amount, create_time

原始查询为:

SELECT id, user_id, status, total_amount, create_time FROM orders WHERE user_id = 12345 ORDER BY create_time DESC LIMIT 990, 10;
  • 业务背景:查询某用户最近的订单,且需要支持分页。

  • 数据量假设:企业级通常几十万到几百万条订单。


二、原始 SQL 执行计划分析

使用 EXPLAIN查看原始 SQL:

idselect_typetabletypepossible_keyskeykey_lenrowsExtra
1SIMPLEordersrefuser_iduser_id450Using filesort

分析:

  1. type=ref→ 使用了user_id索引进行精确匹配。

  2. key=user_id→ 索引选择正确。

  3. Extra=Using filesort→ ORDER BY create_time DESC 未覆盖索引,需要额外排序。

  4. 扫描行数→ MySQL 会扫描前 990 条行再丢弃(LIMIT 偏移量大),深分页效率低。

✅ 结论:单列索引只能加速 WHERE 条件,排序仍需额外操作。


三、复合索引优化

为了提升查询效率,我们创建复合索引:

ALTER TABLE orders ADD INDEX idx_user_create (user_id, create_time DESC);
  • 作用

    1. 覆盖WHERE user_id=…条件。

    2. 覆盖ORDER BY create_time DESC条件。

  • 优化后 EXPLAIN

idselect_typetabletypepossible_keyskeykey_lenrowsExtra
1SIMPLEordersrefidx_user_createidx_user_create820Using index condition

分析:

  1. type=ref → ref→ 使用索引范围扫描,避免全表扫描。

  2. key_len=8→ 复合索引长度增加。

  3. Extra=Using index condition→ ICP (Index Condition Pushdown) 优化回表行数。

✅ 结论:复合索引同时覆盖 WHERE + ORDER BY,大幅减少扫描行数和排序成本。


四、游标分页改写

深分页仍有偏移量大的问题,可以改写为游标分页:

SELECT id, user_id, status, total_amount, create_time FROM orders WHERE user_id = 12345 AND create_time < '2024-06-01 12:00:00' ORDER BY create_time DESC LIMIT 10;
  • 优势

    • 不用 OFFSET,避免扫描前面大量行。

    • 对大数据量分页性能稳定。

  • EXPLAIN 输出

idselect_typetabletypepossible_keyskeykey_lenrowsExtra
1SIMPLEordersrangeidx_user_createidx_user_create810Using index condition

✅ 结论:扫描行数恒定,排序在索引中完成,性能最佳。


五、实践总结

  1. 深分页性能问题

    • OFFSET 大时,MySQL 会扫描并丢弃大量行。

    • ORDER BY 未覆盖索引 →filesort

  2. 优化策略

    • 复合索引覆盖 WHERE + ORDER BY

    • 游标分页替代大 OFFSET 分页。

  3. EXPLAIN 解析技巧

    • type→ 尽量是refrangeconst,避免ALL

    • key / key_len→ 关注索引是否被正确使用。

    • Extra→ 理解Using index conditionUsing filesort

  4. 经验总结

    • 使用 ICP 能减少回表行数。

    • 游标分页适合大数据量分页查询。

    • SQL 优化不仅是索引,改写查询逻辑同样重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1004800.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

理性抉择方可行远——企业AI转型的路径选择与风险管控

数字化浪潮下&#xff0c;AI转型已成为企业提升核心竞争力的必答题。然而现实中&#xff0c;不少企业陷入“转型即烧钱”“技术即万能”的误区&#xff1a;传统制造企业盲目自研大模型&#xff0c;耗费数百万后无功而返&#xff1b;互联网公司一味追求API集成便捷性&#xff0c…

P2014 [CTSC1997] 选课

P2014 [CTSC1997] 选课 大意 有些学科 \(i\) 有先修课 \(fa\) 这些课程形成了一个树形结构,问选 \(m\) 门课所能达到的最大的学分。 思路 考虑树上背包。 我们定义 \(f_{u,j}\) 表示在 \(u\) 子树内选 \(j\) 门课的最…

彻底讲清 MySQL InnoDB 锁机制:从 Record 到 Next-Key 的全景理解

在真实业务中&#xff0c;你遇到的大多数 MySQL 性能问题、死锁问题&#xff0c;几乎都与“锁”有关。但很多工程师对锁的理解停留在碎片层面&#xff1a; 知道“行锁”“间隙锁”“next-key-lock”&#xff0c;但不知道 SQL 是如何触发这些锁的、锁到底锁在哪里、为什么会锁这…

超越宣传:基于数据与案例的软件人才外包服务商价值评估指南

随着企业技术架构复杂化与项目节奏敏捷化并行&#xff0c;组建高效、稳定的技术团队已成为核心挑战。软件人才外包公司作为企业获取弹性技术能力的关键渠道&#xff0c;其市场正伴随数字化转型浪潮快速演进。据工信部运行监测协调局发布的2025年数据显示&#xff0c;我国软件和…

MCU的启动流程你了解么?

MCU&#xff08;微控制器单元&#xff09;的上电过程是一个精心设计的序列&#xff0c;它确保芯片从完全断电状态可靠地进入正常工作状态。1. 上电复位&#xff08;Power-on Reset&#xff09;当给MCU上电时&#xff0c;电源电压从0V开始上升至额定工作电压&#xff08;如3.3V&…

电机多目标优化与灵敏度分析:探索电机性能提升之道

电机多目标优化&#xff0c;灵敏度分析。 图12为变量与优化目标的灵敏度&#xff0c;图13为变量之间的显著性分析。 该方法在电机顶刊IEE工业电子学报上发表。图引用&#xff1a;Liu F, Wang X, Xing Z, et al. Analysis and Research on No-Load Air Gap Magnetic Field and S…

I2C通信最全面的讲解:从协议到硬件设计

IIC&#xff08; Inter-Integrated Circuit&#xff0c;or I2C&#xff09;协议是由飞利浦半导体&#xff08;现在的恩智浦半导体&#xff09;开发&#xff0c;并于1982年发布的一种串行、半双工总线&#xff0c;主要用于近距离&#xff0c;低速的芯片之间的通信&#xff1b;I2…

毕业论文选题AI推荐:9大工具+热门方向合集

毕业论文选题AI推荐&#xff1a;9大工具热门方向合集 &#xfffd;&#xfffd; 核心AI工具对比速览 工具名称 核心功能 适用场景 生成速度 特色优势 aibiye 初稿生成/降重/格式优化 全学科通用 20-30分钟 支持理工科图表公式自动插入 aicheck 选题推荐/查重/AIGC检…

打造下一个爆款!专业短剧APP全栈开发解决方案,解锁万亿级市场红利

一、市场前景&#xff1a;千亿蓝海&#xff0c;正待掘金短剧行业正以惊人速度扩张&#xff1a;市场规模&#xff1a;2023年超500亿&#xff0c;预计2025年突破千亿用户规模&#xff1a;日活用户超1.2亿&#xff0c;付费转化率超20%投资回报&#xff1a;头部APP月流水可达数千万…

【题解】Luogu P10752 [COI 2024] Sirologija

思路难以发现但易于理解的题。 题意 从 \(N\times M\) 的网格中,找尽可能多的路径,要求:起点在左上角,终点在右下角,路径只能向右和向下延伸 两条路径不能相互穿过 相邻两条路径之间必须包含有洞求出路径数量的最…

PFC2D预制裂隙巴西劈裂试验模拟:探索岩石破裂奥秘

pfc2d预制裂隙的巴西劈裂试验模拟在岩石力学研究领域&#xff0c;巴西劈裂试验是一种常用的测试岩石抗拉强度的方法。而通过PFC2D&#xff08;Particle Flow Code in 2D&#xff09;软件对预制裂隙的巴西劈裂试验进行模拟&#xff0c;能帮助我们更深入理解岩石在复杂裂隙条件下…

PSRR仿真教程:解锁电路抗噪能力的密钥

PSRR 仿真教程&#xff0c; 怎么仿真电路的psrr&#xff1f; [1]两个电路案例&#xff0c;一个是16分频的分频器&#xff1b; [2]一个是250MHz的环形压控振荡器&#xff1b; 仿真方法是用Cadence的psspxf。 PSRR的测量对于改善对噪声源的免疫力很重要&#xff1b; 如电源涟漪由…

Python字符串:别只用来打印!这5个高级用法让代码效率翻倍

Python字符串:别只用来打印!这5个高级用法让代码效率翻倍 提到Python字符串,很多人第一反应是“用来存文字、打印输出”。但实际上,字符串作为Python中最常用的内置类型之一,藏着大量高效实用的方法——从字符串拼…

C51_AH3144霍尔传感器

文章目录一、霍尔传感器   1、霍尔传感器分类   2、AH3144&#xff1a;二、代码实例   1、查询方式&#xff08;物体计数&#xff09;   2、外部中 断方式&#xff08;电机测速&#xff09;   3、实例现象一、霍尔传感器 霍尔传感器是一种基于霍尔效应的磁敏传感器&a…

C51_74HC595串口转并口

文章目录一、74HC595   1、芯片引脚   2、内部框图   3、时序操作二、单芯片工模式   1、原理图   2、驱动代码     1&#xff09;、74hc595.h     2&#xff09;、74hc595.c     3&#xff09;、mian.c三、级联工作模式   1、原理图   2、驱动代码 …

【题解】Atcoder ABC432 C

思路 遇事不决先排个序。注意到如果要让所有人分得的糖果重量相等,那么糖更少的人需要的大糖更多。因每人分得糖果数量确定,所以总重量越大,每人需要的大糖数量就越多。为了让大糖总数最多,不妨给糖最少的人全分大…

赶due党救急!论文降重2小时搞定,不熬夜

赶due党救急&#xff01;论文降重2小时搞定&#xff0c;不熬夜 赶due党救急&#xff01;论文降重2小时搞定&#xff0c;不熬夜 嘿&#xff0c;各位赶due党们&#xff01;我是AI菌。今天&#xff0c;咱们就来聊聊那个让无数学生头疼的问题——论文降重。别担心&#xff0c;我不…

5 分钟快速入门 Gitlab CI/CD

&#x1f680; 快速掌握 GitLab CI/CD&#xff1a;自动化你的开发流程 GitLab CI/CD 是一个功能强大的工具&#xff0c;它内置于 GitLab 中&#xff0c;用于自动化你的软件构建、测试和部署流程。如果你希望提升开发效率、减少人为错误并实现持续集成/持续部署&#xff08;CI/…

16 位 SAR ADC 逐次逼近型 ADC 模拟集成电路设计探秘

【16位SAR ADC 逐次逼近型ADC模拟集成电路设计】 16位SAR ADC 同步时序&#xff1b; 采样率1MHz&#xff1b; 动态比较器&#xff1b; 栅压自举采样开关&#xff1b; 测试电路&#xff1b; 精度为14.61&#xff1b; 台湾65nm工艺 下载后可直接使用&#xff0c;保证仿出正确波形…

计算机论文模板推荐:8大平台+AI修改工具

计算机论文模板推荐&#xff1a;8大平台AI修改工具 工具对比速览 工具名称 核心功能 生成速度 适用场景 特色优势 秒篇 全学科初稿生成 20-30分钟 论文初稿快速成型 自动插入图表/公式/代码 aicheck 初稿生成查重 20-30分钟 初稿与查重同步 原创性检测格式规范 …