聚簇索引回表与覆盖索引
一句话InnoDB 的表本身就是一棵以主键为 key 的 ​B 树聚簇索引​。普通索引的叶子节点存的是主键值查数据时需要​回表​。覆盖索引让查询不回表是性能优化的核心手段。聚簇索引Clustered Index什么是聚簇索引InnoDB 的表 一棵以主键为 key 的 B 树。这棵树就是聚簇索引。B 树的 key 主键 id B 树的叶子节点 整行数据id, name, age, ... 所以 SELECT * FROM user WHERE id 100; → 从 B 树根节点开始3 层就到叶子节点直接拿到整行数据 ✅主键索引的叶子节点就是数据本身。找到了 key 就找到了整行数据。聚簇索引的特性① 一个表只能有一个聚簇索引 因为数据在磁盘上只能按一种顺序物理排列 ② 主键就是聚簇索引 CREATE TABLE user (id BIGINT PRIMARY KEY, ...) → id 就是聚簇索引 ③ 没有主键怎么办 MySQL 优先级 有主键 → 主键做聚簇索引 ✅ 没主键 → 第一个 NOT NULL 唯一索引 → 聚簇索引 都没有 → 隐藏的 ROW_ID → 聚簇索引为什么不推荐 UUID 做主键自增 IDbigint 新数据 → key 递增 → 追加到 B 树最右边 → 不发生页分裂 → 性能好 ✅ UUID字符串 新数据 → key 随机 → 插入到 B 树中间 → 页分裂频繁 → 性能差 ❌ 分布式场景替代方案雪花算法 - 64 位 long8 字节和 bigint 一样 - 按时间递增追加到 B 树末尾 - 全局唯一非聚簇索引普通索引普通索引的叶子节点存什么CREATEINDEXidx_ageONuser(age);idx_age 这棵 B 树 内部节点存 age路标 叶子节点存 age 主键 id不是整行数据 所以 SELECT * FROM user WHERE age 25; ① 走 idx_age → 找到叶子节点 → 拿到主键 id100 ② 拿 id100 去聚簇索引再查一次 → 拿到整行数据 ③ 第②步就叫回表回表Back to Table什么是回表普通索引不存整行数据只存主键 id。 查到主键 id 后还需要再去聚簇索引查一次才能拿到整行数据。 这第二次查询就叫回表。 回表的代价多一次 B 树查找多几次磁盘 I/O怎么避免回表用覆盖索引。-- 假设有一个联合索引idx_age_name(age, name)-- ❌ 会回表SELECT*FROMuserWHEREage25;-- 因为 * 包含了 age、name 之外的其他字段-- 普通索引的叶子节点没有这些字段 → 必须回表-- ✅ 不回表覆盖索引SELECTage,nameFROMuserWHEREage25;-- age 和 name 都在 idx_age_name 的叶子节点里 → 直接返回 ✅覆盖索引定义查询的字段全部包含在索引的叶子节点中不需要回表。 覆盖索引 索引覆盖了查询所需的全部字段 例子 表user(id, name, age, address) 索引idx_age_name(age, name) SELECT age, name FROM user WHERE age 25 → age 和 name 都在 idx_age_name 的索引树里 → MySQL 只走索引树不回表 ✅Oracle/达梦 vs MySQL 索引差异MySQL InnoDB 聚簇索引叶子节点 → 存整行数据 普通索引叶子节点 → 存主键 id 回表用主键 id 再去聚簇索引查一次 Oracle/达梦 主键索引叶子节点 → 存 ROWID物理地址 普通索引叶子节点 → 存 ROWID物理地址 回表用 ROWID 直接定位到数据行一次寻址 所以 Oracle/达梦也需要回表但 ROWID 是物理地址 定位数据比 MySQL 的主键 id 二次查询更快一步。 面试回答模板InnoDB 的表本身就是一棵以主键为 key 的 B 树聚簇索引。 一个表只能有一个聚簇索引因为数据只能按一种顺序物理排列。 普通索引的叶子节点存的是主键值查数据时需要先走普通索引 拿到主键 id再去聚簇索引查整行数据——这叫回表。 避免回表的方法是覆盖索引把查询中用到的字段都包含在索引里。 这样索引树本身就包含了所有需要的数据不用回表。 这也是为什么建联合索引时除了条件字段还要考虑 select 的字段。参考来源《MySQL 技术内幕InnoDB 存储引擎》MySQL 官方文档Clustered and Secondary Indexes

相关新闻

高级java每日一道面试题-2026年03月22日-实战篇[Docker]-如何长期存储海量容器日志?

高级java每日一道面试题-2026年03月22日-实战篇[Docker]-如何长期存储海量容器日志?

海量容器日志长期存储深度解析 在微服务和云原生架构下,容器日志量呈指数级增长。金融、政务等行业要求日志保留数年以满足合规审计,同时运维仍需要快速检索近期日志。长期存储海量日志的核心矛盾在于存储成本与查询性能之间的平衡。必须设计一套分层的、…

2026/7/6 14:31:32阅读更多 →
大模型商业化淘汰赛:巨头与创业公司盈利逻辑、全行业趋势深度解析

大模型商业化淘汰赛:巨头与创业公司盈利逻辑、全行业趋势深度解析

前言行业发展正式告别纯粹技术竞赛的泡沫周期,大模型赛道进入残酷淘汰赛阶段。两年前行业全民追逐模型参数、底层架构,资本不计成本投入算力研发,只要完成基座模型训练就能拿到高额融资;如今市场逻辑彻底反转,资本收紧…

2026/7/6 14:31:32阅读更多 →
14| 怎么老是出现“地址已经被使用”?

14| 怎么老是出现“地址已经被使用”?

引用上一讲我们讲到 UDP 也可以像 TCP 一样,使用 connect 方法,以快速获取异步错误的信息。在今天的内容里,我们将讨论服务器端程序重启时,地址被占用的原因和解决方法。我们已经知道,网络编程中,服务器程序…

2026/7/6 14:31:32阅读更多 →
Camera Shakify:3分钟为Blender动画注入真实电影感的神器

Camera Shakify:3分钟为Blender动画注入真实电影感的神器

Camera Shakify:3分钟为Blender动画注入真实电影感的神器 【免费下载链接】camera_shakify 项目地址: https://gitcode.com/gh_mirrors/ca/camera_shakify 你是否厌倦了Blender动画中那些过于完美的镜头?想要为你的作品增添真实感和电影质感&…

2026/7/6 15:36:46阅读更多 →
如何从零开始掌握计算机科学:终极免费开源自学路线图

如何从零开始掌握计算机科学:终极免费开源自学路线图

如何从零开始掌握计算机科学:终极免费开源自学路线图 【免费下载链接】computer-science 🎓 Path to a free self-taught education in Computer Science! 项目地址: https://gitcode.com/GitHub_Trending/co/computer-science 想要获得系统性的计…

2026/7/6 15:36:46阅读更多 →
如何在PC上使用yuzu模拟器畅玩Switch游戏:完整问题解决指南

如何在PC上使用yuzu模拟器畅玩Switch游戏:完整问题解决指南

如何在PC上使用yuzu模拟器畅玩Switch游戏:完整问题解决指南 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu yuzu是目前最受欢迎的开源任天堂Switch模拟器,让玩家能够在Windows、Linux和Andr…

2026/7/6 15:36:46阅读更多 →
Layan GTK主题架构解析与高级配置实现

Layan GTK主题架构解析与高级配置实现

Layan GTK主题架构解析与高级配置实现 【免费下载链接】Layan-gtk-theme Layan-gtk-theme 项目地址: https://gitcode.com/gh_mirrors/la/Layan-gtk-theme Layan是一款基于Material Design设计理念的现代化GTK主题,专为GTK 3、GTK 2和GNOME Shell桌面环境提供…

2026/7/6 15:36:46阅读更多 →
如何用tiny11builder将Windows 11瘦身50%:新手也能掌握的终极精简指南

如何用tiny11builder将Windows 11瘦身50%:新手也能掌握的终极精简指南

如何用tiny11builder将Windows 11瘦身50%:新手也能掌握的终极精简指南 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder 你是否感觉Windows 11越来越臃肿…

2026/7/6 15:36:46阅读更多 →
ICM-42605与MK20DN128VFM5实现6DOF运动追踪方案

ICM-42605与MK20DN128VFM5实现6DOF运动追踪方案

1. ICM-42605与MK20DN128VFM5的硬件组合解析 在三维空间运动追踪领域,ICM-42605和MK20DN128VFM5这对组合堪称黄金搭档。ICM-42605是TDK旗下InvenSense推出的6轴IMU(惯性测量单元),集成了3轴加速度计和3轴陀螺仪,采用2.…

2026/7/6 15:31:45阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/6 4:26:20阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/6 2:48:33阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/6 0:10:35阅读更多 →
Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 技术架构先行:官方接口的合规应用 你是否曾在BP阶段手忙脚乱&#x…

2026/7/6 0:03:39阅读更多 →
多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理 【免费下载链接】mRemoteNG mRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager. 项目地址: https://gitcode.com/gh_m…

2026/7/6 0:03:39阅读更多 →
COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南在数据分析和处理领域,去重统计是最基础也是最频繁使用的操作之一。当数据量达到亿级规模时,不同的去重统计方法在性能上可能产生天壤之别。本文将基于 5 亿行数据的实…

2026/7/6 0:03:39阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/6 4:45:01阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/6 4:45:01阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/6 4:45:03阅读更多 →