展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

MyISAM中索引的数据结构

起步

  • B树索引适用存储引擎
即使多个存储引擎支持同一种类型的索引,但是他们的实现原理也是不同的。
Innodb和MyISAM默认的索引是Btree索引;而Memory默认的索引是Hash索引。
MyISAM引擎使用 B+Tree 作为索引结构,叶子节点的data域存放的是 数据记录的地址

MyISAM中索引的数据结构

  • 简介
MyISAM中索引的数据结构是将索引和数据分开存储

将表中的记录按照记录的插入顺序单独存储在一个文件中,称之为数据文件。这个文件并不划分为若干个数据页,有多少记录就往这个文件中塞多少记录
就成了。由于在插入数据的时候并没有刻意按照主键大小排序,所以我们并不能在这些数据上使用二分法进行查找

使用MyISAM存储引擎的表会把索引信息另外存储到一个称为索引文件的另一个文件中。MyISAM会单独为表的主键创建一个索引,只不过在索引的叶子节点
中存储的不是完整的用户记录,而是主键值+数据记录地址的组合。

  • 在第2个字段上建立二级索引

  • MyISAM 与 InnoDB对比

MyISAM的索引方式都是“非聚簇”的,与InnoDB包含1个聚簇索引是不同的。小结两种引擎中索引的区别:
① 在InnoDB存储引擎中,我们只需要根据主键值对 聚簇索引 进行一次查找就能找到对应的记录,
而在MyISAM 中却需要进行一次 回表 操作,意味着MyISAM中建立的索引相当于全部都是二级索引
② InnoDB的数据文件本身就是索引文件,而MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址
③ InnoDB的非聚簇索引data域存储相应记录主键的值,而MyISAM索引记录的是地址。换句话说,
InnoDB的所有非聚簇索引都引用主键作为data域。
④ MyISAM的回表操作是十分快速的,因为是拿着地址偏移量直接到文件中取数据的,反观InnoDB是通过
获取主键之后再去聚簇索引里找记录,虽然说也不慢,但还是比不上直接用地址去访问。
⑤ InnoDB要求表必须有主键( MyISAM可以没有 )。如果没有显式指定,则MySQL系统会自动选择一个
可以非空且唯一标识数据记录的列作为主键。如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段
作为主键,这个字段长度为6个字节,类型为长整型。
posted @ 2022-06-13 14:14  DogLeftover  阅读(394)  评论(0编辑  收藏  举报