当前位置: 首页 > article >正文

回表为什么慢:二级索引到聚簇索引、覆盖索引与“延迟关联”

目标你能把“回表”解释成一个可量化的成本模型并掌握两类实战优化覆盖索引与延迟关联先查主键再回表。1. 先把概念说透InnoDB 的两棵树聚簇索引主键 B 树叶子存整行数据二级索引普通/联合索引 B 树叶子通常存索引列主键值作为指向聚簇索引的“地址”因此用二级索引定位到一批主键后还要到主键树再查一遍拿整行这个“再查一遍”就是回表。2. 回表慢在哪里随机 IO 缓冲池命中下降如果命中的主键分布很散每个主键都可能落在不同的数据页就会产生大量随机访问当结果集大时回表成本近似于回表次数 * (一次主键树查找的页访问)即使这些页最终在 buffer pool 命中CPU 也会因大量指针跳转和缓存失效而变慢。3. 如何识别“回表过多”常见信号EXPLAINkey是二级索引Extra没有Using indexSQL 表现where 过滤很强但 select 返回大量列select *limit 很大或范围很大3.1 一个可复现的最小例子同样的 where不同的 select 会差很多准备一张典型业务表createtablet_order(idbigintprimarykey,user_idbigintnotnull,create_timedatetimenotnull,titlevarchar(64)notnull,contentvarchar(2000)notnull,keyidx_user_time(user_id,create_time,id,title));这里故意放一个比较“大”的列content模拟详情字段。对照 1select *无法覆盖 - 必然回表explainselect*fromt_orderwhereuser_id1orderbycreate_timedesc,iddesclimit20;你应该预期key命中idx_user_time但Extra通常不会出现Using index因为content不在索引里必须回表。对照 2只查列表字段覆盖索引 - 少回表甚至不回表explainselectid,title,create_timefromt_orderwhereuser_id1orderbycreate_timedesc,iddesclimit20;你应该预期更可能出现Extra: Using index同样的 where/order但整体 IO 压力明显更小4. 第一类优化覆盖索引最优雅覆盖索引查询所需列都在二级索引叶子中不需要回表示例-- 列表页只要 id、create_timeselectid,create_timefromtwhereuser_id?orderbycreate_timedesclimit20;索引(user_id, create_time, id)验证Extra: Using index4.1 覆盖索引的边界索引太宽会降低扇出让树变高只把“高频查询必须返回的列”放进去即可5. 第二类优化延迟关联先少量主键再回表场景你必须返回很多列无法覆盖但你只需要返回很少行比如第一页 20 条典型写法select*fromtwhereidin(selectidfromtwhereuser_id?orderbycreate_timedesclimit20);直觉内层子查询只走二级索引拿到 20 个 id外层回表只回 20 次相比“先扫描很多索引再回表很多次”回表次数被压缩到limit。5.2 对照组大分页时延迟关联的价值最大错误回表被 offset 放大select*fromt_orderwhereuser_id1orderbycreate_timedesc,iddesclimit10000,20;正确先拿 20 个主键再回表 20 次select*fromt_orderwhereidin(selectidfromt_orderwhereuser_id1orderbycreate_timedesc,iddesclimit10000,20);注意这不是银弹仍然要EXPLAIN验证优化器是否按你的预期执行。5.1 注意点in (subquery)可能被优化器改写务必EXPLAIN验证如果排序字段与索引不一致仍会 filesort6. 与分页的关系大 offset 会放大回表select*fromtwhereuser_id?orderbycreate_timedesclimit100000,20;问题需要跳过 10 万行如果还要回表会产生大量无效回表建议seek 分页基于 lastId/lastTime7. 常见坑“加了索引还是慢”索引只是让定位更快但回表仍可能是瓶颈“Using index 就一定快”覆盖索引也可能扫很多行选择性差仍然慢8. 线上排查 checklistEXPLAIN 看Extra是否Using index检查是否select *检查是否大分页 offset检查索引是否能同时支持 where order8.1 更流程化的排查顺序建议照着做固定证据拿到慢 SQL 参数慢日志/APM不要只看模板先判断是否“回表导致的慢”where 很强但仍慢并且select *或返回列很多用 EXPLAIN 只看两件事key是否命中二级索引Extra是否缺少Using index意味着回表选择优化路径能只返回必要列做覆盖索引必须返回整行且 limit 小用延迟关联页码很大优先改 seek 分页否则 offset 本身就是瓶颈9. 面试背诵稿50 秒在 InnoDB 中主键是聚簇索引叶子存整行二级索引叶子存索引列加主键所以通过二级索引查整行通常要再去主键树查一次这就是回表。回表慢的本质是大量随机访问数据页尤其是结果集大或分页 offset 大时会放大。优化主要两类第一是覆盖索引让查询列都在二级索引叶子里EXPLAIN 的 Extra 会出现 Using index第二是延迟关联先用索引拿到少量主键比如 limit 20再回表取整行从而把回表次数压缩到分页大小。

相关文章:

回表为什么慢:二级索引到聚簇索引、覆盖索引与“延迟关联”

目标:你能把“回表”解释成一个可量化的成本模型,并掌握两类实战优化:覆盖索引与延迟关联(先查主键再回表)。1. 先把概念说透:InnoDB 的两棵树 聚簇索引(主键 B 树):叶子…...

Pixel Epic在MBA教学中的应用:学生用像素界面完成商业计划书作业案例

Pixel Epic在MBA教学中的应用:学生用像素界面完成商业计划书作业案例 1. 引言:当商业教育遇上像素冒险 在传统MBA教学中,商业计划书撰写往往是让学生头疼的作业任务。学生们需要花费大量时间收集数据、分析市场、构建财务模型,最…...

HarmonyOS 6学习:语音识别准确率提升与错误纠正方案

引言 在HarmonyOS 6应用开发中,语音识别能力已成为构建智能交互体验的核心技术。随着AI技术的快速发展,语音识别已广泛应用于教育、办公、智能家居等多个场景。然而,在实际开发过程中,开发者常面临一个普遍问题:语音识…...

HarmonyOS 6学习:Canvas实现圆角矩形进度条

在HarmonyOS应用开发中,进度条是展示任务进度、加载状态和数据可视化的重要组件。虽然系统提供了Progress组件,但在需要高度定制化、复杂视觉效果或特殊交互的场景下,开发者常常面临以下困境:样式限制:Progress组件难以…...

云服务器是如何保障数据安全的

在云服务器中,访问控制机制是重要的安全屏障。云服务商会实施严格的身份认证,用户需要通过密码、密钥、生物识别等多种方式进行身份验证,只有通过验证的用户才能获得相应的操作权限。同时,基于角色的访问控制将用户分配到不同角色…...

百考通:AI精准赋能开题报告,让学术研究全流程智能化

对于每一位学子与科研人而言,开题报告是学术研究的“第一粒扣子”,它不仅是研究方向的蓝图,更是顺利推进论文写作、获得导师认可的关键。然而,选题迷茫、文献梳理繁琐、逻辑框架搭建困难等问题,常常让开题之路步履维艰…...

2026最权威的十大降AI率助手推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 把维普平台针对 AI 生成内容的检测机制作为对象,要降低论文 AI 率得从语言重构以…...

「码动四季·开源同行」go实战案例:如何保证微服务实例资源安全?

今天我和你分享的是如何保证微服务实例资源安全的案例。在前文,我们实践了如何使用Go搭建一个基本的授权服务器,它的主要功能是颁发访问令牌和验证访问令牌的有效性。在统一认证与授权服务体系中,还存在资源服务器对用户数据进行保护&#xf…...

3个步骤掌握lx-music-desktop开源项目部署实践

3个步骤掌握lx-music-desktop开源项目部署实践 【免费下载链接】lx-music-desktop 一个基于 Electron 的音乐软件 项目地址: https://gitcode.com/GitHub_Trending/lx/lx-music-desktop lx-music-desktop是一款基于Electron开发的跨平台音乐软件,通过本指南你…...

别再把AI当聊天机器人了:Claude Code之父的“15倍速”工程化工作流全拆解

在这个AI编程工具层出不穷的时代,大多数人还在纠结“哪家大模型的代码补全更准”,或者在对话框里一行行地复制粘贴代码。然而,Anthropic工程师、Claude Code的缔造者Boris Cherny最近在X上公开的一套工作流,直接震碎了开发者社区的…...

禅道最新22.0+ 手动删除无法安装之清理卸载办法

禅道项目管理软件卸载方法详解:如何彻底清除所有相关文件和配置在企业或个人开发环境中,禅道(Zentao)作为一款广受欢迎的开源项目管理工具,因其功能全面、易用性强而被广泛使用。然而,在某些情况下&#xf…...

用Stacking集成学习算法实现精准预测

集成学习算法Stacking组合随机森林AdaBoost检验评估未来预测 Stacking 的原理是通过组合多个不同的学习模型,将它们的预测作为输入,训练一个元学习器来进行最终的预测 不同于 Bagging 和 Boosting,Stacking 的核心是使用一个新的模型来学习如…...

OpenClaw对话式编程:Qwen3-14B辅助代码生成与调试

OpenClaw对话式编程:Qwen3-14B辅助代码生成与调试 1. 为什么需要对话式编程助手 作为一个长期与代码打交道的开发者,我经历过太多深夜调试的煎熬时刻——盯着报错信息反复修改却始终无法通过测试,或是为了一个简单的功能翻遍Stack Overflow…...

AI辅助开发C语言项目,让快马平台智能生成学生成绩管理系统

最近尝试用AI辅助开发一个C语言的学生成绩管理系统,整个过程比想象中顺利很多。这个项目虽然不算复杂,但涉及模块化设计、文件操作、指针管理等知识点,正好可以验证AI在辅助开发中的实际效果。下面分享我的具体实践过程: 需求分析…...

【NotebookLM 使用教程】 Slides 指令库:11套通用PPT风格Prompt(含中英文对照)

前言适合谁:不想从零写提示词,想直接套用成熟的 PPT 风格结构。你会获得什么:11 套通用风格指令(英文为主,含中文备用),可直接粘贴到 NotebookLM Slides 的描述/自定义。建议阅读顺序&#xff1…...

基于Qwen3.5-2B的MySQL智能运维助手:自动SQL优化与故障排查

基于Qwen3.5-2B的MySQL智能运维助手:自动SQL优化与故障排查 1. 引言:当数据库运维遇上AI助手 最近跟几位DBA朋友聊天,发现他们每天要花大量时间处理两类重复性工作:分析慢SQL和排查数据库故障。一位在电商公司工作的朋友吐槽&am…...

基于YOLOv11深度学习的车辆碰撞检测系统(YOLOv11+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)

一、项目介绍 随着城市交通密度的不断增加,交通事故尤其是车辆碰撞事件的频发对公共安全构成了严重威胁。传统的交通监控手段主要依赖人工查看监控视频,存在效率低下、实时性差以及容易因疲劳导致漏报等问题。 为了解决这一痛点,本项目基于…...

多语言双轨直销系统开发要点

系统架构设计 采用微服务架构确保模块化与扩展性,支持高并发场景。数据库设计需考虑多语言数据存储,推荐使用NoSQL(如MongoDB)处理非结构化翻译内容。负载均衡技术保障全球用户访问速度。核心功能模块 会员管理模块实现双轨层级计…...

基于STM32LXXX的无线收发芯片(CMT2300A-EQR)应用程序设计

一、简介: CMT2300A是一款超低功耗,高性能,适用于各种127至 1020 MHz无线应用的OOK,(G)FSK射频收发器。它是 CMOSTEK NextGenRFTM射频产品线的一部分,这条产品线 包含完整的发射器,接收器和收发器。CMT2300A的高集成 度,简化了系统设计中所需的外围物料。高达+20 dBm及-…...

黑客用ChatGPT生成病毒:安全测试员的噩梦

当攻击进入“自动化”时代对于软件测试从业者而言,每一次技术革新都意味着测试对象、方法和工具的深刻变革。过去,我们面对的是由人类程序员编写的、逻辑相对固定的代码。然而,大语言模型(LLM)的兴起,特别是…...

万象视界灵坛实战教程:构建语义搜索API供前端React/Vue应用调用

万象视界灵坛实战教程:构建语义搜索API供前端React/Vue应用调用 1. 项目概述与核心价值 万象视界灵坛是一款基于OpenAI CLIP模型的高级多模态智能感知平台,它将复杂的语义对齐技术转化为直观的视觉体验。本教程将指导开发者如何将其强大的语义搜索能力…...

短视频 SEO 关键词优化有哪些注意事项

短视频 SEO 关键词优化有哪些注意事项 在当今数字化时代,短视频平台已经成为了信息传播和内容分享的重要渠道。无论你是个人创作者还是品牌运营者,短视频的流量和曝光度都是关键。在这个竞争激烈的环境中,如何有效地进行短视频 SEO 关键词优…...

自学渗透测试第八天(网络安全法、伦理规范与工具链联动)

3.2 网络安全法、伦理规范与工具链联动(第8天)核心目标树立法律与道德意识:深入理解《网络安全法》等相关法规的核心要求,明确渗透测试的法律边界和职业伦理,建立红线意识。掌握标准测试流程:将前7天所学的…...

异步电机spwm变频仿真Matlab/simulink,三相逆变桥使用开关switch

异步电机spwm变频仿真Matlab/simulink,三相逆变桥使用开关switch在电力系统中,异步电机是一种非常重要的执行器,广泛应用于各种工业控制场景。而SPWM(空间相量调制)变频控制是一种高精度、高效率的调速控制方式&#x…...

Cursor Free VIP:彻底解决AI编程助手使用限制的智能解决方案

Cursor Free VIP:彻底解决AI编程助手使用限制的智能解决方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached yo…...

用风水学重构代码:周易卦象优化系统架构

在软件工程领域,系统架构的优化与性能调优一直是技术专家们不懈探索的核心课题。传统的优化思路往往聚焦于算法效率、资源调度、中间件配置等技术维度。然而,一个更具颠覆性的视角正在悄然兴起:将源自古老东方智慧的《周易》卦象体系&#xf…...

2.5m双馈风力发电机DFIG的带储能Simulink电气建模与仿真(参数源自IEEE3)”

2.5m双馈风力发电机DFIG并网_带储能的simulink电气建模与仿真,参数来自IEEE3半夜两点盯着Simulink界面眼冒绿光,手里的咖啡已经续到第五杯——这大概每个搞风电建模的工程师都经历过的场景。今天咱们就唠唠这个让人又爱又恨的2.5MW双馈风机并网模型&…...

ModTheSpire模组加载器全攻略:从入门到精通的玩家实用指南

ModTheSpire模组加载器全攻略:从入门到精通的玩家实用指南 【免费下载链接】ModTheSpire External mod loader for Slay The Spire 项目地址: https://gitcode.com/gh_mirrors/mo/ModTheSpire 一、初识ModTheSpire:模组世界的钥匙 🗝️…...

3大阶段解决TrollInstallerX安装失败问题

3大阶段解决TrollInstallerX安装失败问题 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX TrollInstallerX作为一款专为iOS 14.0至16.6.1设备设计的TrollStore安装器&…...

利用快马AI快速构建picoclaw机器人控制器驱动原型

今天想和大家分享一个用InsCode(快马)平台快速搭建picoclaw机器人控制器原型的有趣经历。picoclaw是一款很酷的微型控制器,能直接驱动电机和读取传感器,特别适合做小型机器人项目。但每次从零开始写驱动代码总让人头疼,这次尝试用AI辅助开发&…...