mysql myisam 存储结构_【MySQL】MySQL中MyISAM与InnoDB中都是使用什么数据结构存储表数据,有什么区别呢?...

本文详细介绍了InnoDB和MyISAM两种MySQL存储引擎在使用B+树存储索引时的区别。InnoDB将数据和索引存储在同一文件中,而MyISAM则分开存储。在InnoDB的B+树中,叶节点包含完整数据记录,而在MyISAM中,叶节点仅存储数据记录的地址。此外,MyISAM的主索引和辅助索引结构相似,而InnoDB的辅助索引中叶节点存储主键值。
摘要由CSDN通过智能技术生成

我们可以先给出答案,两种存储引擎都是基于B+树数据结构存储表数据的,但是区别在于InnoDB存储引擎中的B+树即存储了索引又存储了所有数据,而MyISAM中的B+树中只存储了索引的Key值地址,实际的数据存储在其他地方。

我们分别创建两张表,一张user表使用InnoDB存储引擎,一张配置表config使用MyISAM存储引擎,我们会发现两张表的存储文件格式不一样,user表有两个文件,对应如下:user.frm:表结构文件

user.ibd:索引和数据文件(InnoDB Data)

而config表有三个文件,对应如下:config.frm:表结构文件

config.MYD:数据文件(MyISAM Data)

config.MYI:索引文件(MyISAM Index)

通过以上文件,我们可以获知,InnoDB存储引擎的索引和数据都存储在一个文件中,而MyISAM存储引擎的索引和数据存储是分开的。

MyISAM

我们先来看看MyISAM存储引擎是如何使用B+树存储索引以及数据的。MyISAM引擎使用B+树作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyISAM索引的原理图:

在MyISAM中,主索引和辅助索引在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。如果我们在Col2上建立一个辅助索引,则此索引的结构如下 图所示:

InnoDB

虽然InnoDB也使用B+Tree作为索引结构,但具体实现方式却与MyISAM截然不同。InnoDB的数据文件本身就是索引文件,表的主键索引这棵树的非叶子节点存储的是主键的key值,而叶节点data域保存了完整的数据记录:

InnoDB的辅助索引与主键的聚集索引类似,但是data域存储相应记录主键的值而不是地址。例如,下图为定义在Col2上的一个辅助索引:

小结

总结以上,MyISAM和InnoDB都是以B+树数据结构存储数据的,但MyISAM的数据文件和索引文件是分开的,InnoDB的数据文件就是索引文件。

MyISAM主索引中的B+树中,叶节点的data域存放的是数据记录的地址,而InnoDB中的叶子节点叶节点data域保存了完整的数据记录。

MyISAM辅助索引中的B+树中,叶节点的data域存放的是数据记录的地址,而InnoDB中的叶子节点叶节点data域保存的是主键的值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值