MyISAM与InnoDB 数据结构的区别

https://zhuanlan.zhihu.com/p/343746709

mysql底层的数据结构是B+树,但是同样是B+树,但是确实有很大的不同。

先说一下B树与B+数,如下图
在这里插入图片描述
B树

在这里插入图片描述

B+树

1、MyISAM存储引擎

MyISAM索引文件在数据库中存放的对应表的磁盘文件有*.frm,.MYD,.MYI结尾的三个文件;

frm文件是存放的表结构,表的定义信息;

MYD文件是存放着表中的数据;

MYI文件存放着表的索引信息;
在这里插入图片描述

MyISAM存储引擎的数据结构是B+树,其结构如下:(MyISAM存储引擎的主键索引跟非主键索引结构是一样的)

在这里插入图片描述

解释:

图中白色方块,存储的是指针信息,指向下一个叶节点索引位置。
图中黄绿色方块存储的是索引信息
图中蓝色表是数据信息
索引最底层的叶节点,存储的是索引信息(第一层)及数据指针信息,第二层的指针信息则分别指向数据表位置及相邻索引磁盘位置。
图中上面部分带有指针信息及索引信息的存储在MYI索引文件
图中右下角的表格是数据信息及表结构信息,是MYD数据文件及frm文件

2、InnoDB存储引擎

InnoDB索引文件在数据库中存放的对应表的磁盘文件有*.frm,*.ibd结尾的两个文件;

frm文件是存放的表结构,表的定义信息;

*.ibd文件是存放着表中的数据、索引信息;

在这里插入图片描述

InnoDB存储引擎的数据结构是B+树,结构如下:

在这里插入图片描述

注意

1、MyISAM存储引擎的非主键索引与InnoDB存储引擎的非主键索引数据结构是一样的,但是最底层叶节点存储的数据和指针信息是不同的。

MyISAM存储引擎的非主键索引最底层叶节点存储的是索引信息数据指向文件的指针信息

InnoDB存储引擎的非主键索引最底层叶节点存储的是索引信息指向主键索引的指针信息

2、MyISAM存储引擎的数据文件跟索引文件是两个文件。InnoDB存储引擎的数据文件跟索引文件是一个文件。所以找到了主键索引位置也就找到了数据位置。所以InnoDB主键索引被称为聚合索引。