关于InnoDB表数据和索引数据的存储

举报
程序员欣宸 发表于 2022/07/18 06:55:43 2022/07/18
【摘要】 弄清楚InnoDB表数据存储的细节

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

来自Mysql官方的说明

我的疑问

  • 按照上面的说法,InnoDB表的聚簇索引在同一个结构中保存了B-Tree索引和数据行,了解这个知识点后,我的疑问是:既然索引中有整行记录,那么表数据文件还有什么用呢?

来自《高性能MySql》的解释

  • 《高性能MySql》的5.3.5章节对于聚簇索引的描述:
  1. 聚簇索引并不是一种单独的索引类型,而是一种数据数据存储方式;
  2. 当表有聚簇索引是,它的数据行实际上存在放在索引的叶子页(leaf page)中;
  3. 叶子页包含了行的全部数据;
  • 看来我的疑问可以解释了:索引数据和表数据分开存储这种理解在InnoDB是错误的,实际上InnoDB的表数据保存在主键索引的B-Tree的叶子节点;

  • 再来看看大神文章中的解释;

Jeremy Cole的解释

在这里插入图片描述

在这里插入图片描述

反思

  1. 向数据库新增一条记录会保存索引数据和表数据,但并不代表会分别写索引文件和表数据文件,以前犯的是想当然错误;
  2. 之前的疑问是"索引文件中有数据行,那表数据文件有啥用",没有放过这个疑问,而是去刨根问底,终于有所收获;
  3. 虽然搜索一些中文文章也有答案,但搜索权威著作或者大神文章,能把问题理得更清晰,而且通过翻阅相关的目录和章节还能获得更全面的答案;

欢迎关注华为云博客:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴…

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。