mysql InnoDB数据存储引擎 的B+树索引原理

一、InnoDB原理

在 InnoDB 中,每个索引其实都是一颗 B+ 树,主键索引也称作聚簇索引,其他非主键索引称作二级索引,每个表中每一行的记录值都完整的保存在主键索引的叶子节点上,二级索引的叶子节点保存的是主键的值

每个表至少都有一个主键索引,而且表中所有的数据行都是存放在主键索引这个 B+ 树的叶子节点上的。如果你给表的其他字段加了索引的话,这个索引就是二级索引了,二级索引也是 B+ 树。

二级索引和主键索引的不同之处在于其叶子节点上保存的值不一样,表中所有字段的值都被完整的保存在主键索引的叶子节点上,但是二级索引的叶子节点只保存对应主键的值。一个表上有多少个索引,其实就会有多少个 B+ 树。

我们举一个具体的例子来还原下这个问题。首先提供一个表,表中有三个字段 (id,k,m),分别给主键 id 和字段 k 建立主键索引和二级索引。

mysql> create table t(
id int primary key,
k int not null,
m int(11),
index (k)) engine=InnoDB;

然后再给表中插入几条数据,用R1、R2、R3、R4、R5表示,插入的具体数据如下:R1~R5 的 (id,k,m) 值分别为 (100,1,1000)、(200,2,2000)、(300,3,3000)、(500,5,5000)、(600,6,6000)。

主键索引叶子节点上保存完整的整行记录值,二级索引叶子节点保存主键的值,所以上面这个表 t 的数据在 mysql 底层的存储就如下示意图。

猜你喜欢

转载自blog.csdn.net/qq_34820803/article/details/107567066