MySQL的limit优化2
一、底层原理
在 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的更多相关文章
- MySQL的limit优化
mysql的分页比较简单,只需要limit offset,length就可以获取数据了,但是当offset和length比较大的时候,mysql明显性能下降 1.子查询优化法 先找出第一条数据,然后大 ...
- MYSQL分页limit速度太慢优化方法
http://www.fienda.com/archives/110 在mysql中limit可以实现快速分页,但是如果数据到了几百万时我们的limit必须优化才能有效的合理的实现分页了,否则可能卡死 ...
- mysql的limit经典用法及优化
用法一 SELECT `keyword_rank`.* FROM `keyword_rank` WHERE (advertiserid='59') LIMIT 2 OFFSET 1; 比如这个 ...
- 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案
如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案
- Mysql limit 优化,百万至千万级快速分页,--复合索引的引用并应用于轻量级框架
MySql 性能到底能有多高?用了php半年多,真正如此深入的去思考这个问题还是从前天开始.有过痛苦有过绝望,到现在充满信心!MySql 这个数据库绝对是适合dba级的高手去玩的,一般做一点1万篇新闻 ...
- MySQL的limit用法及优化(转)
常规用法: 用法一: OFFSET ; 比如这个SQL ,limit后面跟的是2条数据,offset后面是从第1条开始读取. 用法二: ,; 而这个SQL,limit后面是从第2条开始读,读取1条信息 ...
- MySQL的limit分页性能测试加优化
日常我们分页时会用到MySQL的limit字段去处理,那么使用limit时,有什么需要优化的地方吗?我们来做一个试验来看看limit的效率问题:环境:CentOS 6 & MySQL 5.71 ...
- Mysql查询优化汇总 order by优化例子,group by优化例子,limit优化例子,优化建议
Mysql查询优化汇总 order by优化例子,group by优化例子,limit优化例子,优化建议 索引 索引是一种存储引擎快速查询记录的一种数据结构. 注意 MYSQL一次查询只能使用一个索引 ...
- Mysql limit 优化优化
MySql 性能到底能有多高?用了php半年多,真正如此深入的去思考这个问题还是从前天开始.有过痛苦有过绝望,到现在充满信心! MySql 这个数据库绝对是适合dba级的高手去玩的,一般做一点1万篇新 ...
- MySQL分页limit速度太慢的优化方法
limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. SELECT * FROM table LIMIT ...
随机推荐
- streamlit使用技巧
实现上传PDF并显示 ## 上传并预览(1M以内才可预览) def upload_Pre(): file = st.file_uploader("选择待上传的PDF文件", typ ...
- python:公共操作
运算符 公共方法 range """ 1 2 3 4 5 6 7 8 9 """ # 不包含 end# 如果不写开始,默认从零开始# 如果不 ...
- 斩获“年度突破成果”奖!天翼云构建强大AI算力基础,制胜人工智能新时代
8月18-19日,2023中国算力大会在宁夏银川举办.在大会"年度突破成果"发布环节,中国电信天翼云<基于异构多云环境下的息壤算力调度应用实践>荣获2023中国算力大会 ...
- C++代码改造为UTF-8编码问题的总结
1. 引言 无论是哪个平台哪种编程语言,字符串乱码真是一个让人无语的问题:你说这个问题比较小吧,但是关键时刻来一下真是受不了.解决方式也有很多种,但是与其将编码转换来转换去,不如统一使用同一种编码方式 ...
- Vue3 基础概念与环境搭建
前言 首先需要提醒大家的是,Vue2 已经在2023年停止维护,为了能更好地适应前端开发的发展趋势以及获得更好的性能和功能,我们将从这篇文章开始进入Vue3的阶段.如果对Vue2有想了解的小伙伴可以自 ...
- 关于企业微信扫码登陆vue
关于企业微信扫码登陆vue 企业微信扫码登陆官方文档 采用的是第一种(构造独立窗口登录二维码) 对于前端来说就步骤就是 页面展示二维码 => 用户扫码登陆点击确定 => 确定之 ...
- QT5笔记: 26. 多窗体应用程序设计
- ABP登录返回错误次数、锁定时间
ABP默认登录返回错误结果时,不会显示错误次数.锁定时间.为了实现验证错误时返回错误次数.锁定时间,我们需要改造返回接口. 1.定位验证错误的地方: 修改部分代码 1 /// <summar ...
- Typecho 博客文章评论添加显示 UserAgent(UA)的功能
本篇文章实现了为 Typecho 博客文章评论添加显示 UserAgent(UA)的功能 本功能可替代 UserAgent 插件,更美观.简洁且好看 效果显示 大概就是这样了,实际效果请看我的评论! ...
- TIDB 数据库架构概述
学习目标 题解数据库整体架构 了解 TiDB Server .TiKV.TiFlash.和 PD 的主要功能 文章末尾获取笔记.视频资料,持续更新 体系架构 水平扩容或者缩容 金融级高可用 实时 HT ...