一、底层原理

在 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 条件缩小数据范围,减少扫描的行数

示例:

适用场景:

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

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

MySQL的limit优化2的更多相关文章

  1. MySQL的limit优化

    mysql的分页比较简单,只需要limit offset,length就可以获取数据了,但是当offset和length比较大的时候,mysql明显性能下降 1.子查询优化法 先找出第一条数据,然后大 ...

  2. MYSQL分页limit速度太慢优化方法

    http://www.fienda.com/archives/110 在mysql中limit可以实现快速分页,但是如果数据到了几百万时我们的limit必须优化才能有效的合理的实现分页了,否则可能卡死 ...

  3. mysql的limit经典用法及优化

    用法一   SELECT `keyword_rank`.* FROM `keyword_rank` WHERE (advertiserid='59') LIMIT 2 OFFSET 1;   比如这个 ...

  4. 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案

    如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案

  5. Mysql limit 优化,百万至千万级快速分页,--复合索引的引用并应用于轻量级框架

    MySql 性能到底能有多高?用了php半年多,真正如此深入的去思考这个问题还是从前天开始.有过痛苦有过绝望,到现在充满信心!MySql 这个数据库绝对是适合dba级的高手去玩的,一般做一点1万篇新闻 ...

  6. MySQL的limit用法及优化(转)

    常规用法: 用法一: OFFSET ; 比如这个SQL ,limit后面跟的是2条数据,offset后面是从第1条开始读取. 用法二: ,; 而这个SQL,limit后面是从第2条开始读,读取1条信息 ...

  7. MySQL的limit分页性能测试加优化

    日常我们分页时会用到MySQL的limit字段去处理,那么使用limit时,有什么需要优化的地方吗?我们来做一个试验来看看limit的效率问题:环境:CentOS 6 & MySQL 5.71 ...

  8. Mysql查询优化汇总 order by优化例子,group by优化例子,limit优化例子,优化建议

    Mysql查询优化汇总 order by优化例子,group by优化例子,limit优化例子,优化建议 索引 索引是一种存储引擎快速查询记录的一种数据结构. 注意 MYSQL一次查询只能使用一个索引 ...

  9. Mysql limit 优化优化

    MySql 性能到底能有多高?用了php半年多,真正如此深入的去思考这个问题还是从前天开始.有过痛苦有过绝望,到现在充满信心! MySql 这个数据库绝对是适合dba级的高手去玩的,一般做一点1万篇新 ...

  10. MySQL分页limit速度太慢的优化方法

    limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. SELECT * FROM table LIMIT ...

随机推荐

  1. SM3

    算法过程 代码实现 国标 /************************************************************************ File name: SM ...

  2. @所有Mac用户 刺客信条系列登陆Mac平台!

    [历史性的跨越] 在无数Mac游戏爱好者的热切期盼中,终于将风靡全球的3A级巨作--刺客信条系列,成功移植至MacOS系统!这意味着,无论是穿梭于中世纪欧洲的隐秘巷弄,还是翱翔于维多利亚时代的伦敦天际 ...

  3. USACO24DEC Cake Game S 题解 [ 黄 ] [ 前缀和 ] [ adhoc ]

    Cake Game:小清新前缀和题,但是我场上想了半天优先队列贪心假完了 /ll/ll/ll. 观察 本题有三个重要的结论,我们依次进行观察. 不难发现,第二个牛一定会拿 \(\frac{n}{2}- ...

  4. Luogu P4310 绝世好题 题解 [ 绿 ] [ 线性 dp ] [ 单调队列优化 ] [ 二进制优化 ]

    题目:绝世好题. 暴力 dp 显然 \(O(n^2)\) 转移即可. 单调队列优化 观察到只有某二进制位两个数都为 \(1\) 时才能转移,因此我们把每个二进制位开一个单调队列,然后对于一个数 \(a ...

  5. win10安装MongoDB 5.0

    1.首先去官网下载安装包:https://www.mongodb.com/try?tck=docs_navbar 2.安装过程一路下一步就行,选择complete安装,可以勾选安装Compass工具 ...

  6. 5分钟搞定!用比扬云SD-WAN远程访问飞牛NAS全攻略

    作为一个NAS重度用户,我最近遇到了一个头疼的问题:如何在外部安全地访问家里的飞牛NAS?经过一番摸索,我发现比扬云SD-WAN是个不错的解决方案,今天就来分享我的实战经验. 一.为什么选择比扬云SD ...

  7. 升级 element-ui 2.15.7 后遇到 el-date-picker 警告问题

    近期把 element-ui 升级到了官网最新的 2.15.7 版本,无意间发现控制台出现了 Prop being mutated: "placement" 警告,完整警告:

  8. Lombok 只会用@Setter @Getter @Data ? 老鸟带你玩转lombok

    lombok的官网 官方网址 : https://projectlombok.org lombok 稳定特性文档:https://projectlombok.org/features/ lombok ...

  9. Deepseek学习随笔(1)--- 初识 DeepSeek

    什么是 DeepSeek? DeepSeek 是一款基于人工智能的对话工具,旨在帮助用户高效完成各种任务,包括文本生成.代码编写.数据分析等.通过自然语言处理技术,DeepSeek 能够理解用户的输入 ...

  10. mybatis - [13] 分页

    题记部分 001 || limit select * from mybatis.user limit 2,5; 2代表偏移量,从结果集的第3行开始. 5代表返回的记录数 UserMapper List ...