MyISAM与InnoDB引擎的区别、Mysql中B+Tree树的体现形式

目录

在MyIsam引擎中的体现

在InnoDB 引擎中的体现

MyIsam与InnoDB引擎的主要区别


各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!

索引的实现是由存储引擎来实现的,那么在  MySQL 中比较主流的两大引擎是:MyIsam 和 InnoDB。可以在建表的时候指定使用哪种存储引擎,如你可以这样指定:

image.png

在MyIsam引擎中的体现

MyISAM 的数据和索引是分别存储的,在创建好表结构并且指定存储引擎为 MyISAM 之后,会在数据目录生成3个文件,分别是 table_name.frm(表结构文件),table_name.MYD(数据保存文件),table_name.MYI(索引保存文件)。这些在mysql体系结构、存储文件和sql语句的执行流程 也说过,关于B+Tree相关的在mysql索引机制、二分查找法、二叉树、平衡二叉树、B-Tree、B+Tree有详细介绍,感兴趣的可以看下。

image.png

如上一张表,两个文件分别保存了数据及索引,由于 B+Tree 中只有叶子节点保存数据区,在 MyISAM 中,B+Tree的数据区中保存的是数据的引用地址,比如说 id 为101的数据信息所保存到物理磁盘地址为 0x123456,当扫描到这个指针位置,就可以通过这个磁盘指针将数据加载出来。

 

image.png

在 MyISAM 中,name 索引和 ID 索引是一样的,叶子节点也是保存它指向的磁盘位置指针,他们是平级的。

在InnoDB 引擎中的体现

InnoDB 的数据和索引是存储在一起的,在创建好表结构并且指定存储引擎为 InnoDB 之后,会在数据目录生成2个文件,分别是 table_name.frm(表结构文件),table_name.idb(数据与索引保存文件)。InnoDB  B+Tree 的体现是以主键为索引来组织数据的存储,当我们没有显示的建立主键索引的时候,存储引擎会隐式的生成一个6位的 int 型的索引来作为它的主键索引以组织数据的存储。

image.png

数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同,InnoDB 就是以聚集索引来组织数据的存储的,在叶子节点上,保存了数据的所有信息。如果这个时候建立了 name 字段的索引,它是如何组织数据的,如下图所示:

image.png

会产生一个辅助索引,即 name 字段的索引,而此刻叶子节点上所保存的数据为聚集索引(ID索引)的关键字的值,基于辅助索引找到 ID 索引的值,再通过 ID 索引区获取最终的数据。这个做法的好处是在于产生数据迁移的时候只要 ID 没发生变法,那么辅助索引不需要重新生成,不这么做的话,如果存储的是磁盘地址的话,在数据迁移后所有辅助索引都需要重新生成。

MyIsam与InnoDB引擎的主要区别

InnoDB:行级锁、支持事务、主键索引方式进行数据存储、支持外键关系保证数据完整性。
MyISAM:表锁、不支持事务、数据和索引分开存储。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值