一、底层原理

在 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. streamlit使用技巧

    实现上传PDF并显示 ## 上传并预览(1M以内才可预览) def upload_Pre(): file = st.file_uploader("选择待上传的PDF文件", typ ...

  2. python:公共操作

    运算符 公共方法 range """ 1 2 3 4 5 6 7 8 9 """ # 不包含 end# 如果不写开始,默认从零开始# 如果不 ...

  3. 斩获“年度突破成果”奖!天翼云构建强大AI算力基础,制胜人工智能新时代

    8月18-19日,2023中国算力大会在宁夏银川举办.在大会"年度突破成果"发布环节,中国电信天翼云<基于异构多云环境下的息壤算力调度应用实践>荣获2023中国算力大会 ...

  4. C++代码改造为UTF-8编码问题的总结

    1. 引言 无论是哪个平台哪种编程语言,字符串乱码真是一个让人无语的问题:你说这个问题比较小吧,但是关键时刻来一下真是受不了.解决方式也有很多种,但是与其将编码转换来转换去,不如统一使用同一种编码方式 ...

  5. Vue3 基础概念与环境搭建

    前言 首先需要提醒大家的是,Vue2 已经在2023年停止维护,为了能更好地适应前端开发的发展趋势以及获得更好的性能和功能,我们将从这篇文章开始进入Vue3的阶段.如果对Vue2有想了解的小伙伴可以自 ...

  6. 关于企业微信扫码登陆vue

        关于企业微信扫码登陆vue   企业微信扫码登陆官方文档 采用的是第一种(构造独立窗口登录二维码) 对于前端来说就步骤就是 页面展示二维码 => 用户扫码登陆点击确定 => 确定之 ...

  7. QT5笔记: 26. 多窗体应用程序设计

  8. ABP登录返回错误次数、锁定时间

    ABP默认登录返回错误结果时,不会显示错误次数.锁定时间.为了实现验证错误时返回错误次数.锁定时间,我们需要改造返回接口.   1.定位验证错误的地方: 修改部分代码 1 /// <summar ...

  9. Typecho 博客文章评论添加显示 UserAgent(UA)的功能

    本篇文章实现了为 Typecho 博客文章评论添加显示 UserAgent(UA)的功能 本功能可替代 UserAgent 插件,更美观.简洁且好看 效果显示 大概就是这样了,实际效果请看我的评论! ...

  10. TIDB 数据库架构概述

    学习目标 题解数据库整体架构 了解 TiDB Server .TiKV.TiFlash.和 PD 的主要功能 文章末尾获取笔记.视频资料,持续更新 体系架构 水平扩容或者缩容 金融级高可用 实时 HT ...