Mysql索引数据结构–B+Tree

B+ Tree是在B Tree 的基础上做的优化,变化如下:

1、B+ Tree每个节点可以包含更多的节点,这个做的原因有两个,第一个原因是为了降低数的高度,第二个是为了将数据范围化为多个区间,区间越多,索引越快
2、非叶子节点储存Key,叶子节点存储key和数据
3、叶子节点两两指针相互连接(符合磁盘的预读特性),顺序查询性能更高

MyISAM
MyISAM是MySQL默认的存储引擎。MyISAM不⽀持事务、也不⽀持外键,其优势是访问的速度快,对事务完整性没有要求或者以 SELECT、INSERT 为主的应⽤基 本上都可以使⽤这个引擎来创建表。

我们可以进入mysql文件中的data目录,选择一个数据库,查看存储在磁盘上的结构:
Mysql存储引擎MyISAM和InnoDB
其中 .frm文件存储的是表结构
.MYI文件存储的是表的索引
.MYD文件存储的是数据文件

MyISAM索引文件和数据文件是分离的(非聚集)
可以看下图理解一下:
Mysql存储引擎MyISAM和InnoDB
其中 Primary Key通过非叶子节点的区间,快速定位到叶子节点,取出value ,这个value就是.MYI中的一条索引数据,再通过这个索引指向的是.MYD的数据,通过一次磁盘IO 定位到那条数据,就去取出那条数据。

InnoDB
InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能⼒的事务安全。但是对⽐MyISAM的存储引擎,InnoDB写的处理效率差⼀些,并且会占⽤更多的磁盘空间以保 留数据和索引

我们也可以去查看一下该表是如何存储在磁盘上的
Mysql存储引擎MyISAM和InnoDB
.frm文件存储的是表结构
.bid文件存储的是索引和数据文件,相互对应的

InnoDB索引文件和数据文件是共同存储在.bid文件里面的(聚集)
可以看下图理解一下:
Mysql存储引擎MyISAM和InnoDB
其中 Primary Key通过非叶子节点的区间,快速定位到叶子节点,其中叶子节点上存储的是索引+数据。就不需要在想MyISAM那样再进行一次磁盘IO了,直接取出即可。

为什么InnoDB必须要有主键推荐使用整型的自增列呢?
https://blog.csdn.net/a1_HelloWord/article/details/104341349

相关文章:

  • 2021-07-27
  • 2022-01-14
  • 2021-10-17
  • 2021-05-24
  • 2021-09-02
  • 2021-07-22
  • 2021-12-12
  • 2021-10-14
猜你喜欢
  • 2021-10-16
  • 2021-06-16
  • 2021-05-17
  • 2021-12-09
  • 2022-12-23
  • 2021-07-20
  • 2021-07-25
相关资源
相似解决方案