详细解读MySQL中的B+Tree 落地形式

写在前面:

  • 我热爱技术,热爱分享,热爱生活, 我始终相信:技术是开源的,知识是共享的!
  • 博客里面的内容大部分均为原创,是自己日常的学习记录和总结,便于自己在后面的时间里回顾,当然也是希望可以分享自己的知识。目前的内容几乎是基础知识和技术入门,如果你觉得还可以的话不妨关注一下,我们共同进步!
  •  个人除了分享博客之外,也喜欢看书,写一点日常杂文和心情分享,如果你感兴趣,也可以关注关注!
  • 微信公众号:傲骄鹿先生

目录

MySQL 数据存储文件

MyISAM

InnoDB


插达式的存储引擎 MySQL最大的优势:索引是有存储引擎实现的

MySQL5.5版本之前 默认的存储引擎是MyISAM,5.5版本之后 InnoDB成了默认的存储引擎

MySQL 数据存储文件

InnoDB 的表有两个文件( .frm 和.ibd) , MyISAM 的表有三个文件( .frm、 .MYD、 .MYI) 。
有一个是相同的文件, .frm。 .frm 是 MySQL 里面表结构定义的文件。

MyISAM

在 MyISAM 里面, 另外有两个文件:
一个是.MYD 文件, D 代表 Data, 是 MyISAM 的数据文件, 存放数据记录, 比如我们的user_myisam表的所有的表数据。
一个是.MYI 文件, I 代表 Index, 是 MyISAM 的索引文件, 存放索引, 比如我们在 id 字段上面创建了一个主键索引, 那么主键索引就是在这个索引文件里面。也就是说, 在 MyISAM 里面, 索引和数据是两个独立的文件。


MyISAM 的 B+Tree 里面, 叶子节点存储的是数据文件对应的磁盘地址。 所以从索引文件.MYI 中找到键值后, 会到数据文件.MYD 中获取相应的数据记录。

如果是辅助索引, 有什么不一样呢?
ALTER TABLE user_innodb DROP INDEX index_user_name;
ALTER TABLE user_innodb ADD INDEX index_user_name (name);
在 MyISAM 里面, 辅助索引也在这个.MYI 文件里面。 辅助索引跟主键索引存储和检索数据的方式是没有任何区别的, 一样是在索引文件里面找到磁盘地址, 然后到数据文件里面获取数据。

InnoDB

InnoDB 只有一个文件(.ibd 文件) 。在 InnoDB 里面, 它是以主键为索引来组织数据的存储的, 所以索引文件和数据文件是同一个文件,都在.ibd 文件里面。在 InnoDB 的主键索引的叶子节点上, 它直接存储了我们的数据。

聚集索引就是索引中的数据物理存放地址和索引的顺序是一致的(比如字典的目录是按拼音排序的,内容也是按拼音排序的, 按拼音排序的这种目录就叫聚集索引) 。

所以在 InnoDB 里面, 主键索引是聚集索引, 非主键都是非聚集索引。
那主键之外的索引, 比如我们在 name 字段上面建的普通索引, 又是怎么存储和检索数据的呢?

InnoDB 中, 主键索引和辅助索引是有一个主次之分的。
辅助索引存储的是辅助索引和主键值。 如果使用辅助索引查询, 会根据主键值在主键索引中查询,最终取得数据。比如我们用 name 索引查询 name=’青山’, 它会在叶子节点找到主键值, 也就是 id=1, 然后再到主键索引的叶子节点拿到数据。

本篇文章作为下篇文章的辅助说明,下篇文章详细总结《MySQL索引优化》。欢迎指正指导哈!

 

posted @ 2021-05-30 18:57  傲骄鹿先生  阅读(126)  评论(0编辑  收藏  举报