mysql limit偏移量大怎么优化_mysql分页性能提升技巧
发布时间 - 2026-02-01 00:00:00 点击率:次LIMIT 100000,20 慢因需扫描跳过前10万行;应改用游标分页(如WHERE id为什么
LIMIT 100000, 20会慢得离谱因为 MySQL 在执行这类语句时,必须先扫描并跳过前 100000 行(即使不返回),再取后续 20 行。如果没走覆盖索引,还会回表查完整记录;若
ORDER BY字段无索引,甚至要额外排序临时结果集。本质是“全扫+丢弃”,不是“直接定位”。用游标分页替代
LIMIT offset, size核心思路:不依赖行号偏移,改用上一页最后一条记录的排序字段值作为查询起点。要求排序字段(如
id或created_at)有唯一性或配合其他字段构成唯一约束。示例(按自增
id降序分页):SELECT * FROM orders WHERE id < 123456 ORDER BY id DESC LIMIT 20;下一页就用刚查出的最小
id值继续缩小范围。这种方式避免了跳过大量数据,索引可高效定位起点。
- 必须有合适的索引支持,例如
INDEX (id)或INDEX (status, created_at, id)- 不能跳页(比如直接跳到第 100 页),只适合“下一页/上一页”场景
- 若排序字段非唯一(如多个记录
created_at相同),需补上主键去重:WHERE (created_at, id)延迟关联(deferred join)减少回表开销
当分页字段和查询字段不在同一索引中时,
LIMIT后仍需回表取数据,大偏移量下回表次数爆炸。延迟关联先把主键捞出来,再用主键二次查详情,让回表次数固定为LIMIT size次,而非offset + size次。示例:
SELECT t1.* FROM orders t1 INNER JOIN ( SELECT id FROM orders WHERE status = 1 ORDER BY created_at DESC LIMIT 100000, 20 ) t2 ON t1.id = t2.id;内层子查询只走索引(假设
INDEX(status, created_at, id)),外层用主键精准回查。
- 需要复合索引覆盖
WHERE条件、ORDER BY和主键(否则子查询仍可能慢)- 对
SELECT *场景效果明显;若只需几个字段,优先建覆盖索引更简单- MySQL 5.6+ 对这种写法优化较好,老版本注意检查执行计划是否走了
Using index物理分表 or 时间分区缓解单表压力
当单表超千万级且分页请求集中在最新数据时,老数据拖慢整体查询。这时靠 SQL 优化已触及瓶颈,得从结构入手。
- 按月/季度分表(如
orders_202501),查询时明确指定表名,避开历史数据扫描- 用
PARTITION BY RANGE (TO_DAYS(created_at))分区,配合WHERE created_at >= '2025-01-01'可自动裁剪分区- 注意:分
表后
COUNT(*)和跨时间范围的分页会变复杂,需应用层聚合真正的大偏移量问题,往往不是 SQL 写得不够巧,而是数据模型没跟上访问模式——游标分页解决“怎么查快”,而分表/分区决定“查哪些”。
# mysql
# 为什么
# red
# sql
# count
# select
# using
# 分页
# 主键
# 跳过
# 下一页
# 上一页
# 行号
# 几个
# 偏移量
# 走了
# 多个
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
JavaScript数据类型有哪些_如何准确判断一个变量的类型
如何在服务器上配置二级域名建站?
如何在新浪SAE免费搭建个人博客?
无锡营销型网站制作公司,无锡网选车牌流程?
如何在云虚拟主机上快速搭建个人网站?
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
JS弹性运动实现方法分析
zabbix利用python脚本发送报警邮件的方法
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
简单实现Android验证码
C++用Dijkstra(迪杰斯特拉)算法求最短路径
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
什么是javascript作用域_全局和局部作用域有什么区别?
如何在IIS7中新建站点?详细步骤解析
如何在腾讯云服务器快速搭建个人网站?
浅谈Javascript中的Label语句
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
JavaScript如何实现类型判断_typeof和instanceof有什么区别
网站建设保证美观性,需要考虑的几点问题!
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
Laravel如何处理和验证JSON类型的数据库字段
用v-html解决Vue.js渲染中html标签不被解析的问题
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
Java类加载基本过程详细介绍
零基础网站服务器架设实战:轻量应用与域名解析配置指南
常州企业网站制作公司,全国继续教育网怎么登录?
JS碰撞运动实现方法详解
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
Laravel如何使用Gate和Policy进行授权?(权限控制)
网站建设要注意的标准 促进网站用户好感度!
香港服务器如何优化才能显著提升网站加载速度?
打造顶配客厅影院,这份100寸电视推荐名单请查收
如何快速生成专业多端适配建站电话?
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
Laravel如何实现用户密码重置功能?(完整流程代码)
Laravel定时任务怎么设置_Laravel Crontab调度器配置
如何基于云服务器快速搭建个人网站?
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
微信小程序 五星评分(包括半颗星评分)实例代码
如何基于云服务器快速搭建网站及云盘系统?
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
Bootstrap整体框架之CSS12栅格系统
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】


