【Java踩坑笔记】43_LIMIT大偏移量慢查询,你的分页写法过时了

发布时间:2026/7/14 5:46:55

【Java踩坑笔记】43_LIMIT大偏移量慢查询,你的分页写法过时了
43 | LIMIT 大偏移量慢查询你的分页写法过时了摘要LIMIT 100000, 10要先读 100000 行再丢弃即使有索引也很慢。延迟关联WHERE id lastId是更好的分页方案。一、问题现象-- ❌ 慢查询偏移量 100000SELECT*FROMordersORDERBYidLIMIT100000,10;-- 执行时间约 500ms100万行数据原因MySQL 必须读取前 100000 行然后丢弃只返回最后 10 行。二、踩坑现场场景前端分页用户跳到最后一页// ❌ 前端传 pageNum10000后端直接 LIMITpublicListOrdergetOrders(intpageNum,intpageSize){intoffset(pageNum-1)*pageSize;returnorderMapper.selectByPage(offset,pageSize);// SQL: LIMIT #{offset}, #{pageSize}}现象pageNum 越大查询越慢。三、原理解析3.1 LIMIT 偏移量的执行过程LIMIT 100000, 10 的执行 1. 按 ORDER BY 字段排序或用索引 2. 读取前 100000 行不返回给客户端 3. 读取接下来 10 行 4. 返回这 10 行问题步骤 2 即使有索引也要遍历100000 行。3.2 为什么索引帮不了偏移量索引可以加速WHERE过滤但LIMIT 100000, 10是跳过前 100000 行索引无法避免这个跳过动作。四、正确写法4.1 延迟关联推荐兼容深分页-- ✅ 先通过索引拿 ID再关联拿数据SELECTo.*FROMorders oINNERJOIN(SELECTidFROMordersORDERBYidLIMIT100000,10)AStmpONo.idtmp.id;原理子查询只读取id字段覆盖索引比SELECT *快很多。4.2 记住上一页最后一条的 ID最优但不支持跳页-- ✅ WHERE id lastId走主键索引O(1)SELECT*FROMordersWHEREid100000ORDERBYidLIMIT10;// ✅ 前端/App 翻页用这个方案publicListOrdergetNextPage(LonglastId,intpageSize){returnorderMapper.selectByIdGreaterThan(lastId,pageSize);}4.3 MyBatis 实现延迟关联!-- ✅ MyBatis 实现延迟关联 --selectidselectByPageOptimizedresultTypeOrderSELECT o.* FROM orders o INNER JOIN ( SELECT id FROM orders WHERE create_time #{startTime} ORDER BY id LIMIT #{offset}, #{pageSize} ) tmp ON o.id tmp.id/select五、最佳实践✅ 分页查询的 4 条规范不支持深分页产品层面限制最大 pageNum如最多 100 页能用WHERE id lastId就用它最快必须用偏移量时用延迟关联优化ORDER BY的字段必须有索引 EXPLAIN 验证EXPLAINSELECT*FROMordersORDERBYidLIMIT100000,10;-- 看 rows 列如果是 100010说明扫描了 10万行六、小结LIMIT 100000, 10要先读 10万行再丢弃即使有索引也慢最优方案WHERE id lastId LIMIT 10走主键索引兼容跳页用延迟关联INNER JOIN子查询只查 ID产品层面限制最大分页深度从根源解决问题下一篇预告数据库字段用保留字MyBatis 生成的 SQL 直接报错—— 用反引号包裹字段名但这个坑不止这一个。更多资料一线大厂Java面试题合集

相关新闻

wordpress

wordpress

2026/7/14 5:46:55

编辑设置图片POST /wp-admin/admin-ajax.php HTTP/1.1 Host: wp User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:152.0) Gecko/20100101 Firefox/152.0 Accept: */* Accept-Language: zh-CN,zh;q0.9,zh-TW;q0.8,zh-HK;q0.7,en-US;q0.6,en;q0.5 Accept-Encoding: gz…

智能分析Agent:从对话到执行的零售业实战

智能分析Agent:从对话到执行的零售业实战

2026/7/14 5:46:55

1. 智能分析Agent的本质突破:从对话到执行去年我在给一家零售企业做技术咨询时,遇到个典型场景:他们的数据分析师能用ChatGPT生成漂亮的销售分析报告,但当需要根据分析结果自动调整库存时,却还要手动操作ERP系统。这正…

AgentCPM-Report:离线环境下的专业报告生成智能体

AgentCPM-Report:离线环境下的专业报告生成智能体

2026/7/14 5:36:54

1. 项目概述:当深度调研遇上数据主权上周五晚上11点,我正对着电脑屏幕发愁——手头这份涉及商业机密的行业分析报告已经改了第七版,但关键数据的引用始终让我如坐针毡。就在这个节点,GitHub Trending上突然出现的AgentCPM-Report项…

AI论文降重与合规化处理技术解析

AI论文降重与合规化处理技术解析

2026/7/14 8:27:08

1. 项目概述:AI驱动的学术合规解决方案"百考通"是一款面向学术场景的智能辅助工具,其核心功能是通过AI技术实现论文降重与去除AI生成痕迹的自动化处理。在当前学术规范日益严格的背景下,该系统解决了两个关键痛点:一是帮…

NVIDIA Kimi-K2.7-Code-NVFP4商业应用:从科研到生产的完整路径

NVIDIA Kimi-K2.7-Code-NVFP4商业应用:从科研到生产的完整路径

2026/7/14 8:27:08

NVIDIA Kimi-K2.7-Code-NVFP4商业应用:从科研到生产的完整路径 【免费下载链接】Kimi-K2.7-Code-NVFP4 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/Kimi-K2.7-Code-NVFP4 NVIDIA Kimi-K2.7-Code-NVFP4是基于Moonshot AI的Kimi-K2.7-Code模型优化的…

AI音乐生成技术解析:从音色迁移到歌声合成的完整实践指南

AI音乐生成技术解析:从音色迁移到歌声合成的完整实践指南

2026/7/14 8:27:08

最近在AI音乐生成领域,一个有趣的测试案例引起了开发者社区的关注:让早期胡彦斌的声线模型演唱经典歌曲《偏爱》。这个看似简单的娱乐项目,实际上揭示了当前AI音乐技术在音色迁移、情感表达和版权合规等多个维度的技术边界。 如果你正在探索…

NCMDump完全指南:3步解锁网易云音乐NCM加密文件

NCMDump完全指南:3步解锁网易云音乐NCM加密文件

2026/7/14 8:27:08

NCMDump完全指南:3步解锁网易云音乐NCM加密文件 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式无法在其他设备播放而烦恼吗?ncmdump是一款专业的NCM音乐解密转换工具&#xff…

YOLOv8车辆细粒度识别实战:从环境配置到PyQt5界面开发全流程

YOLOv8车辆细粒度识别实战:从环境配置到PyQt5界面开发全流程

2026/7/14 8:27:08

在智能交通和自动驾驶项目中,车辆类型识别一直是环境感知的核心难点。传统方案往往只能区分"轿车/卡车"等大类,而实际道路场景需要更细粒度的分类能力。本文基于YOLOv8目标检测算法,完整构建了一个支持七种车辆类型识别的检测系统&…

工业信号采集中的噪声抑制与隔离技术实践

工业信号采集中的噪声抑制与隔离技术实践

2026/7/14 8:17:07

1. 工业信号采集的噪声挑战与核心需求在钢铁冶炼、石油化工、电力传输等典型工业现场,信号采集系统面临着多重电磁干扰威胁。我曾参与某焦化厂温度监控系统改造,现场实测发现:当大功率变频器启动时,热电偶信号线上会感应出高达12V…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/13 7:41:16

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/13 20:43:19

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/13 20:43:10

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

XUnity.AutoTranslator 游戏实时翻译插件:从原理到实战的完整指南

XUnity.AutoTranslator 游戏实时翻译插件:从原理到实战的完整指南

2026/7/14 0:06:37

1. 项目概述:当游戏语言成为一堵墙作为一名玩了十几年日系、欧美独立游戏的“老油条”,我太懂那种面对一款心仪已久、画风玩法都戳中G点的游戏,却因为语言不通而望而却步的痛了。尤其是那些基于Unity引擎开发的、体量不大但内容精良的作品&am…

2026普通文员学数据分析的价值

2026普通文员学数据分析的价值

2026/7/14 0:06:37

一、2026年普通文员学习数据分析的必要性随着数字化转型加速,数据分析技能正逐渐成为职场基础能力。普通文员学习数据分析可以提升工作效率、增强竞争力,并为职业转型提供更多可能性。二、数据分析对文员的价值自动化办公:通过数据分析工具&a…

2026从计划员到主管,生产管理者学数据分析有用吗?

2026从计划员到主管,生产管理者学数据分析有用吗?

2026/7/14 0:06:37

一、生产管理领域的职业发展路径 从计划员到主管的角色转变,是生产管理者职业发展的典型路径。计划员主要负责生产排程、库存管理和资源协调等基础工作,而主管则需要承担团队管理、决策支持和效率优化等更高级别的职责。这种转变不仅仅是职位的提升&…