news 2026/5/12 11:09:15

MySQL深分页优化:从LIMIT 1000000,10到毫秒级响应的三种写法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL深分页优化:从LIMIT 1000000,10到毫秒级响应的三种写法

我是小耶,干运营半路出家的野生DBA——写功课只是为了我踩过的坑,你们别再踩了!

刚转行时我写的分页查询是SELECT * FROM orders ORDER BY id LIMIT 1000000, 10。前100页还好,用户翻到第200页就开始转圈。后来才知道这是典型的“深分页”问题。

先解释一个基础概念:LIMIT M, N​到底怎么执行?
数据库拿到这个命令后,会老老实实从第一行开始扫描,扫到第 M+N 行,然后扔掉前面的 M 行,只返回最后 N 行。就像你翻一本1000页的书,要读第900页到910页,但你不能直接翻到900页,只能从第一页开始一页一页翻。M越大,翻的页数越多,越慢。

为什么很多人会踩这个坑?
因为小数据量时(比如几千行)感觉不到慢,一旦表增长到百万、千万级,LIMIT 1000000, 10可能需要扫描上百万行,耗时几秒甚至几十秒。

优化方法一:记住上次位置(游标法)
适用于“下一页”按钮,不需要跳页。假设上一页最后一条记录的 id 是 1000000:

SELECT * FROM orders WHERE id > 1000000 ORDER BY id LIMIT 10;

这就像你合上书,在1000页夹一张书签,下次直接翻到书签位置。数据库利用主键索引快速跳过,只扫描10行,速度恒定在毫秒级。
缺点​:不能跳页(比如直接点第1000页),且如果id之间有删除,每页数量可能不均匀,但通常可接受。

优化方法二:子查询先定位起始id(支持跳页)
如果用户非要跳页,可以用子查询先查出第 M 条开始的 id,再取数据:

SELECT * FROM orders WHERE id >= (SELECT id FROM orders ORDER BY id LIMIT 1000000, 1) ORDER BY id LIMIT 10;

里面的子查询SELECT id FROM ... LIMIT 1000000,1只查id列,而id列通常有主键索引,索引体积小,扫描速度快。拿到起始id后,外层WHERE id>=...的主键查询也是走索引。
实测​:500万数据,传统写法2.3秒,改后0.05秒。

优化方法三:延迟关联(当你要查所有列时特别有效)
如果必须SELECT *返回所有字段,可以先查主键,再关联回原表:

SELECT * FROM orders JOIN (SELECT id FROM orders ORDER BY id LIMIT 1000000, 10) AS tmp USING(id);

子查询只取id(索引覆盖,极快),然后通过id去原表批量取完整行。比直接SELECT *少了很多不必要的数据传输。

什么时候不需要优化?
数据量小(几千行)或用户几乎不走翻页,可以用简单写法。但一旦成为通用查询,建议提前优化。

学会了你将:

  • 避免因深分页导致接口超时、数据库CPU飙升。
  • 不用加额外缓存的成本,纯粹靠SQL改写就能大幅提升体验。
  • 面试或技术分享时,这是一个非常经典的优化案例,能展示你对数据库执行细节的理解。

小耶在手,SQL 不愁。

还有什么想了解的,欢迎留言!小耶一定知无不言言无不尽……我们下次见~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 11:08:59

基于Markdown与AI的智能思维导图系统设计与实现

1. 项目概述:当思维导图遇上AI对话最近在折腾一个挺有意思的小玩意儿,叫“MarkMap-OpenAi-ChatGpt”。光看这个名字,你可能已经猜到了七八分:这大概是一个把思维导图(MarkMap)和AI对话模型(Open…

作者头像 李华
网站建设 2026/5/12 11:08:52

Hyprland截图工具配置指南:从基础到高级工作流集成

1. 项目概述与核心价值 最近在折腾Hyprland窗口管理器,发现一个痛点:截图。系统自带的工具要么功能单一,要么和Hyprland的Wayland环境兼容性不佳。直到我发现了 nikolai2038/hyprland-screenshoter 这个项目,它彻底改变了我在Hy…

作者头像 李华
网站建设 2026/5/12 11:08:08

从握手到快充:深入解读PD协议分析仪捕获的一条真实手机充电流水线

从握手到快充:深入解读PD协议分析仪捕获的一条真实手机充电流水线 当你的手机插上充电器时,看似简单的充电过程背后,其实隐藏着一场精密的数字对话。这条通过Type-C接口CC线传输的协议数据流,决定了你能否享受快充、能以多快的速度…

作者头像 李华
网站建设 2026/5/12 11:08:01

通过用量看板观测API调用成本与Token消耗趋势

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过用量看板观测API调用成本与Token消耗趋势 对于使用大模型API进行开发的团队或个人而言,清晰、透明地掌握调用成本是…

作者头像 李华
网站建设 2026/5/12 11:04:45

TensorFlow.js模型部署超简单

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 TensorFlow.js模型部署:从复杂到超简单的革命性转变目录TensorFlow.js模型部署:从复杂到超简单的革命性转…

作者头像 李华