首页/新闻资讯/正文详情

深分页查询越来越慢,如何优化 LIMIT OFFSET

发布时间:2026/11/4 12:10:01 来源:云帆数科 栏目:资讯中心
深分页查询越来越慢,如何优化 LIMIT OFFSET
深分页查询越来越慢如何优化 LIMIT OFFSET订单列表第一页打开很快翻到第 5000 页却要好几秒。SQL 看起来只取了 20 条LIMIT 100000, 20里的 20 也很小为什么还会慢因为数据库并不是直接跳到第 100000 条它要先数过去。1.LIMIT 100000, 20到底做了什么很多人把LIMIT 100000, 20理解成“从第 100000 条开始取 20 条”。这个理解在结果上没错但执行过程不是瞬移。数据库会先按照ORDER BY的顺序找到符合条件的行然后跳过前 100000 行最后把接下来的 20 行返回。被跳过的行并不是免费消失的它们仍然要经过索引扫描、条件判断很多时候还要回表读取整行数据。SELECT*FROMordersORDERBYidLIMIT100000,20;如果id是主键数据库可以沿着主键顺序扫描。但即使如此它也要走过前 100020 个索引项才能拿到最后那 20 行。页码越深走过的路越长。如果排序字段是普通索引查询又要SELECT *情况会更重数据库先在二级索引里找到一批主键再逐个回表取整行。深分页时这种随机读取会被放大很多倍。图 1OFFSET 要先扫过并丢弃前面十万行游标从上一页的位置继续只读需要的 20 行。2. 为什么第一页快第五百页慢第一页的OFFSET是 0数据库找到开头就能返回成本很小。第二页OFFSET 20只多扫 20 行。到第 5000 页OFFSET变成了 100000扫描量也跟着涨到了十万级。这就是深分页的核心成本大致和OFFSET成正比而不是和LIMIT的大小成正比。第 1 页 OFFSET 0 扫描约 20 行 第 2 页 OFFSET 20 扫描约 40 行 第 5000 页 OFFSET 100000 扫描约 100020 行如果表再大一点或者每行数据比较宽回表次数增加差距会更明显。再加上ORDER BY需要排序、COUNT(*)需要统计总数一个列表接口很容易从几十毫秒变成几秒。3. 游标分页从上一页的位置继续如果页面是“按时间倒序、不断往下翻”的形态最适合的不是OFFSET而是游标分页。不要告诉数据库“跳过前 100000 行”而是告诉它“从上一页最后一条记录之后继续”SELECTid,user_id,amount,created_atFROMordersWHEREid1000000ORDERBYidLIMIT20;这里假设上一页最后一条记录的id是1000000。数据库可以直接从id 1000000的位置开始沿着主键索引取 20 条不需要数前面有多少行。如果排序不是主键而是时间时间又可能重复就要把“时间 唯一键”一起作为游标SELECTid,user_id,amount,created_atFROMordersWHERE(created_at,id)(2026-10-01 12:00:00,1000)ORDERBYcreated_atDESC,idDESCLIMIT20;这里的(created_at, id)是一个组合位置。时间相同的记录再用id区分下一页就不会漏掉或重复。游标分页的代价是不能随机跳到第 5000 页。它适合“下一页”“加载更多”这种连续浏览不适合后台管理系统里“直接跳到最后一页”的需求。4. 延迟关联先拿 ID再回表如果产品确实需要OFFSET分页又不想让每次深翻都回表十万次可以用延迟关联。思路是先在索引里只查本页需要的 20 个主键再用这 20 个主键去取完整数据。SELECTo.*FROMorders oJOIN(SELECTidFROMordersORDERBYidLIMIT100000,20)tONt.ido.idORDERBYo.id;内层查询只取id如果id上有索引它可以只扫描索引不需要为前十万行逐行回表。外层再拿这 20 个id去关联完整数据回表次数就从十万级降到了 20 次。但要说清楚延迟关联减少的是回表成本不是扫描成本。内层仍然要跳过前十万个索引项。对于特别深的页码它能把几秒降到几百毫秒但不一定能像游标分页那样稳定。如果内层查询用的是覆盖索引效果会更明显。比如按created_at排序可以建立(created_at, id)索引让内层只在这个索引里完成排序和取 ID。5. 还有几种降低深分页成本的办法如果业务允许可以直接限制最大页码。搜索引擎通常只展示前几十页不会让用户翻到第一百万条。后台管理系统也可以改成“按条件筛选”而不是无限翻页。对于数据量特别大的列表可以预计算分页边界。比如按时间分区先定位到某个月再在小区间内分页。这样OFFSET始终在一个很小的范围内成本就可控了。如果列表需要复杂的搜索、排序和高亮继续在 MySQL 上做深分页往往不划算。把数据同步到 Elasticsearch 这类搜索引擎用search_after做游标分页通常更合适。另外列表页的总数统计也要注意。SELECT COUNT(*)在千万级表上可能比列表查询还慢。可以缓存总数、使用近似统计或者只显示“还有更多”不必每次请求都精确统计。6.OFFSET分页还有一个一致性问题深分页不只是慢还可能“翻着翻着就乱了”。假设你正在看第 2 页这时有人插入了一条排在前面的新订单。原本第 2 页的第一条会被挤到第 3 页你翻到下一页时可能又看到它一次。反过来如果前面的记录被删除也可能有一条记录被你直接跳过。游标分页基于“上一页最后一条的位置”对插入和删除没那么敏感。它更适合不断有新数据进入的列表。OFFSET分页则更像“按当前排名取第 N 名”数据一变排名就会跟着变。总结LIMIT 100000, 20慢不是那 20 条数据难取而是数据库要先扫过并丢弃前面的十万条。游标分页用“上一页最后一条的位置”代替OFFSET适合连续浏览延迟关联先用覆盖索引取 ID再回表取 20 条能减少深分页的回表成本。选择哪种方式要看页面是否允许随机跳页、排序字段是否稳定以及数据会不会在翻页过程中变化。参考资料MySQL Reference Manual: LIMIT OptimizationMySQL Reference Manual: Range Optimization

相关推荐

深度学习:多模态学习——图文联合表征前沿进展
深度学习:多模态学习——图文联合表征前沿进展

上篇把模型压缩与 ONNX 部署打通,而「图文一起理解」这类多模态能力,正在重新定义模型的边界。 人类一眼看图、一读文字就能把两者联系起来——"这是只橘猫"。但模型长期被割裂成"看图的"和"读字的"。多模态学习要做的&am… · 2026/11/4 12:10:01

华为预安装会议管理平台调试(SMC3.0合设SC+MCU)
华为预安装会议管理平台调试(SMC3.0合设SC+MCU)

一、物理机器连线图注意:网口1和网口2互为主备,绑定为bond0网卡。若无需进行双网卡备份,可仅连接其中一个网口。二、修改iBMC IP地址操作步骤操作步骤使PC机与服务器网络互通。配置PC机的网络适配器设置,使PC机的IP地址与iBMC默认… · 2026/11/4 12:10:01

企业 RAG 原装选手:Cohere Command-R2 开源,100+ 语言 + 强工具调用能不能打?
企业 RAG 原装选手:Cohere Command-R2 开源,100+ 语言 + 强工具调用能不能打?

一、模型速览项目规格模型名Command-R2(Cohere,开放权重)发布时间2026-10-15架构MoE,总参数 200B / 激活 20B,64 专家选 8上下文原生 128K许可Cohere Community License v2(>1 亿 MAU 需商业授权&#x… · 2026/11/4 12:10:01

大数据可视化技术:原理、实践与性能优化
大数据可视化技术:原理、实践与性能优化

1. 大数据可视化为何成为刚需技术 去年处理一个金融风控项目时,客户扔过来300GB的交易日志,当我用传统Excel尝试打开时,程序直接崩溃。这个经历让我深刻意识到:在大数据时代,可视化技术已经不再是锦上添花的装饰品&… · 2026/11/4 12:55:38

离散化算法在贴海报问题中的应用与优化
离散化算法在贴海报问题中的应用与优化

1. 项目背景与核心价值 离散化算法在程序设计竞赛和实际工程开发中都是一个高频出现的核心技术点。我第一次接触这个概念是在处理一个地图坐标压缩的需求时——当时需要处理上百万个经纬度坐标点,直接存储原始数据会导致内存爆炸。离散化技术完美解决了这个问题&… · 2026/11/4 12:55:38

智慧农业传感器技术解析与应用实践
智慧农业传感器技术解析与应用实践

1. 智慧农业传感器的核心价值与应用场景 作为一名在农业物联网领域深耕多年的技术专家,我见证了传感器技术如何彻底改变传统农业生产方式。智慧农业传感器系统本质上是一套"作物生长翻译器",它通过将环境参数和植物生理状态转化为可量化的数据… · 2026/11/4 12:55:38

48V转12V/15V降压方案:DC-DC选型、外围设计与验收避坑
48V转12V/15V降压方案:DC-DC选型、外围设计与验收避坑

简介:面向电动车、储能与工业设备电源设计的降压方案参考资料,聚焦48V(含48V-60V电瓶电压)降至12V或15V的DC-DC电路选型与典型电路图。内容结合LDO与DC-DC的适用差异,给出PW2058、PW2162、PW2608、PW2906、PW2902、PW2… · 2026/11/4 12:55:38

家庭私有云安全防护:mTLS原理与实战部署指南
家庭私有云安全防护:mTLS原理与实战部署指南

1. 为什么家庭私有云需要mTLS防护? 去年发生的飞牛fnOS安全事件给所有家庭NAS用户敲响了警钟。攻击者利用路径穿越漏洞,在未授权情况下访问了数千台暴露在公网上的NAS设备。这让我意识到,仅靠HTTPS和强密码远远不够——我们需要在网络协议层就… · 2026/11/4 12:55:38

基于MySQL号段表的手机号归属地查询与缓存优化实践
基于MySQL号段表的手机号归属地查询与缓存优化实践

简介:这份MySQL手机号归属地数据包面向数据库学习者、数据分析初学者,以及需要做号码地域映射与离线测试的开发者,主要用于根据手机号快速查询对应省份、城市,并支持按地域做批量统计,也适合搭建演示环境或补充报表地域… · 2026/11/4 12:54:38

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

AI辅助技术栈评估:提升研发决策效率60%
AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17

从生成Token到直接决策:Jev如何重塑AI Agent工程实践
从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17

32G统一内存跑大模型:内存账、TPS实测与端云分流
32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码