B+树索引(6)之MyISAM索引方案

本文探讨了MySQL中MyISAM和InnoDB存储引擎的索引差异。MyISAM索引与数据分开存储,主键索引叶子节点只包含主键值和行号,需要回表操作获取完整数据,而InnoDB的聚簇索引将数据和索引合为一体。此外,MyISAM只支持表锁,不支持事务和外键,与InnoDB在存储和事务处理上有显著区别。
摘要由CSDN通过智能技术生成

B+树索引(6)之MyISAM索引方案

前言回顾

在前面索引系列的文章中都是基于InnoDB存储引擎去考虑的,相关文章链接参考如下

B+树索引(5)之索引注意事项

B+树索引(4)之索引分类

B+树索引(3)之索引推导优化

B+树索引(2)之索引的推导

B+树索引(1)之为什么需要索引

我们知道Mysql除了InnoDB存储引擎,常用的还有我们熟知的MyISAM存储引擎,在面试中我们常常将这两个存储引擎进行比较,可能会提到如下区别

  • InnoDB支持行锁(默认)和表锁,而MyISAM存储引擎仅支持表锁。

  • InnoDB支持事务,而MyISAM不支持。

  • InnoDB支持外键,而MyISAM不支持。

  • InnoDB必须要有唯一主键(如果用户指定主键就用用户指定的,没有的话默认采用记录头隐藏列row_id充当),而MyISAM可以没有。

    …等等

那么InnoDB和MyISAM还有没有其它不同呢?当然!我们可以围绕索引讲解。

MyISAM索引方案

在之前InnoDB文章中提到创建一个表后会自动创建一个聚簇索引,这个索引简单概括就是索引既数据,数据既索引,为什么这么说呢?因为聚簇索引的B+树叶子节点存储的是完整的用户数据,如下图所示

而MyISAM存储引擎不同,MyISAM存储引擎虽然也采用树形结构,但是将索引和表数据分开存储,和InnoDB的索引既数据,数据既索引有本质区别。

数据文件

MyISAM存储引擎会将记录按照插入的顺序存储到一个文件中,这个文件称之为数据文件,这个文件并不会划分若干数据页,所以有多少记录都会往这个文件中插入,可以根据行号快速访问到记录,数据页文件结构如下

因为插入顺序是无规律的,所以存放在数据文件中的数据也会是无规律的,所以在数据文件中是没办法通过二分查找检索记录的,我们需要用到索引文件

索引文件

使用MyISAM存储引擎的表会把索引信息存储到另外一个文件中,这个文件就是索引文件,MyISAM会为主键单独创建一个索引,不过这个主键索引的叶子节点并不会保存完整的用户记录,而是保存主键值和行号,所以通过主键值进行查询时就分为两个步骤

  • 通过索引查询到该主键值对应的行号。

  • 根据查询的行号到数据文件中获取完整用户数据。

也就是说采用InnoDB存储引擎通过主键值检索聚簇索引,只需要查询一次就能获取完整用户记录,而MyISAM存储引擎需要回表操作才能获取完整用户记录。

总结

了解完这些后就会发现InnoDB和MyISAM存储引擎的另外两个不同点

  • InnoDB存储引擎的数据和主键索引信息一起存放,而MyISAM存储引擎分开存放。

  • InnoDB数据存储文件为:frm表定义文件,ibd表数据文件,MyISAM数据存储文件为:frm表定义文件,myd数据文件,myi索引文件。

MyISAM的索引方案当然存在很多存储细节,但我们主要以InnoDB存储引擎为主,所以简单了解即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值