MySQL的limit优化2

news/2025/3/12 21:56:20/文章来源:https://www.cnblogs.com/jock766/p/18768670

一、底层原理

在 MySQL 8.0 中,当使用 LIMIT offset, count 进行分页查询时,如果 offset 非常大(例如 LIMIT 200000, 10),性能会显著下降。

这是因为 MySQL 需要扫描 offset + count 行数据,然后丢弃前 offset 行,只返回最后的 count 行


二、基本语法与功能

  • LIMIT子句的基本语法格式为LIMIT offset, count。其中,offset是可选参数,表示返回记录行的偏移量,即从哪一行开始返回,默认为0;count表示返回的行数。

  • 例如,SELECT * FROM table_name LIMIT 5;表示查询table_name表中的前5条记录;

  • SELECT * FROM table_name LIMIT 3, 5;则表示从第4条记录开始获取,共获取5条记录


三、LIMIT 200000, 10;以下优化方案


1、使用覆盖索引(Covering Index)


原理:通过索引直接获取查询所需的所有字段,避免回表查询数据行


优化步骤:

  • 创建覆盖索引,确保索引包含 SELECT 和 WHERE 涉及的所有字段。

  • 改写查询,仅从索引中获取数据


示例:

假设需要查询 orders 表的分页数据,并按 order_date 排序:


关键点:

  • 子查询 SELECT id FROM orders ... 仅扫描索引,避免回表。

  • 外层查询通过 id 快速定位数据行


2、游标分页(Cursor-based Pagination)


原理:基于上一页的最后一条记录的值(如自增 ID 或时间戳)来获取下一页数据,避免使用 offset


示例:

假设按自增 id 分页:


优点:

  • 完全避免 offset,性能稳定(时间复杂度 O(1))

  • 适合有序且连续的字段(如自增 ID、时间戳)


缺点:

  • 不支持随机跳页(只能“上一页”和“下一页”)


3、延迟关联(Deferred Join)


原理:先通过子查询快速定位目标行的主键,再关联原表获取完整数据


示例:


优化效果:

  • 子查询仅扫描索引,避免回表

  • 外层查询通过主键快速定位数据行


4、使用范围条件分页


原理:通过 WHERE 条件缩小数据范围,减少扫描的行数


示例:


适用场景:

  • 主键或唯一键有序且连续

  • 分页逻辑允许按范围查询

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

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

相关文章

20242216 2024-2025-2 《Python程序设计》实验一报告

20242126 2024-2025-2 《Python程序设计》实验x报告 课程:《Python程序设计》 班级: 2421 姓名: 邹清楠 学号:20242126 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(第一次调试时的选…

今日总结(计网以及对Android Studio的进一步学习)

所花时间:130minutes 代码量(行):130 博客量:8 了解的知识点:今天学习了计网的信道复用技术以及对于前一节课的通信系统中涉及的计算问题的复习。 主要为码元与比特的关系,一个码元所携带的比特数 = 1og2x其中x为状态数,比如在计算 中会告诉你状态数,以及码元传输速率…

python公选实验一

20242113《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2421 姓名: 陈铂翔 学号:20242113 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序,并进行调试分…

20243303 实验一《python程序设计》实验报告

学号 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: XXXX 姓名: XXX 学号:XXX 实验教师:XXX 实验日期:2021年X月X日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序,并进行调试分析…

2024-2025-2 20244330《Python程序设计》实验一报告

2024-2025-2 20244330《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2443 姓名: 李馨逸 学号:20244330 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 1.实验内容 (1)熟悉Python开发环境; (2)进行Python运行、调试技能的学习与练习; (3)编…

吴恩达深度学习Part1

What is a Neural Network? Easily,Deep Learning is a more complex Neural Network. We can predict the house prices from the size.Based on it,We can fit a function to predict house prices.But you may find it is strange that the prices can not be negative.So…

字符编码:从基础到乱码解决

本文从常见编译错误入手,剖析字符编码问题。系统介绍现代字符编码五层模型,以“汉”字为例解析各层作用。阐述ASCII、GB2312、Unicode等常见编码标准,对比其特点与适用场景。解释输入与执行字符集概念,强调不一致导致的问题。通过代码示例分析控制台输出中文乱码原因,提出…

20241110 实验一《Python程序设计》实验报告

20241110 2024-2025-2 《Python程序设计》实验x报告 课程:《Python程序设计》 班级: 2411 姓名: 王方俊 学号:20241110 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 一、实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序…

20242125实验一《Python程序设计》实验报告

20242125 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2421 姓名: 单嘉怡 学号:20242125 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 一.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序…

20242120庞耀 2024-2025-2 《Python程序设计》实验一报告

20242120 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2421 姓名:庞耀 学号:20242120 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 1.实验内容 (1).熟悉Python开发环境; (2).练习Python运行、调试技能;(编写书中的…

20242122 实验一_《Python公选课》实验一

课程:《Python程序设计》 班级: 2421 姓名: 苏锦泷 学号:20242122 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能; 3.编写程序,练习变量和类型、字符串、对象、缩进和注释等; 4. 掌握…

20242127 实验一《Python程序设计》实验报告

20242127 2024-2025-2 《Python程序设计》实验报告 课程:《Python程序设计》 班级: 2421 姓名: 李映亮 学号:20242127 实验教师:王志强 实验日期:2021年3月12日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序,…