程序员

InnoDB-B+树索引[一]

2018-07-16  本文已影响0人  辛未_杨

InnoDB知识点梳理

InnoDB逻辑存储结构

表空间:数据都存放在表空间之下

段:数据段,索引段,回滚段

区:由64个页组成

页:InnoDB磁盘管理的最小单位[数据页/Undo页等8种常见类型的页]

行:对应数据库中的一行记录

InnoDB的物理存储结构

InnoDB表由共享表空间[.ibd],日志文件组,表结构定义文件[.frm]组成

InnoDB的行记录格式

Compact行记录格式

Redundant行记录格式

至此,我们大概的了解到数据是如何存储在Innodb中的。


InnoDB数据页结构

File Header

重要属性:

FIL_PAGE_OFFSET 

FIL_PAGE_PREV

FIL_PAGE_NEXT

FIL_PAGE_TYPE[0X45BF/0X0003]

Page Header

重要属性:

PAGE_N_DIR_SLOTS[槽数]

Infimun + Supremum Records[虚拟行]

User Records[实际行]

Free Space 

Page Directory[页目录]用于定位页内的具体一条记录

File Trailer

页目录的逻辑图

在页内,通过Page_Directory二分查找得到一个槽位,如果该槽位的值不是要找的值的话,读取该槽位的记录中的下一个记录。

至此我们可以得到一个页中的一条记录。

PS:Innodb按照索引找到的是记录所在的页,而不是一条具体记录!!!


B+树介绍

B+树 [对于B+树的定义,目前存在一些异议,本文参考维基百科以及<<Mysql技术内幕Innodb存储引擎>>中的定义]是一种数据结构,InnoDB中的索引就是基于B+树实现的。

B+插入/删除节点

案例:https://www.cnblogs.com/nullzx/p/8729425.html

关联关系

InnoDB的页即为B+树中的叶节点,索引即为非叶节点,叶节点中包含了众多的记录。

以聚集索引为例,非叶节点中保存了子节点中主键最小记录及其对应的page地址。所有的非叶节点都相当于构成一层索引,从一个粗略的根页往下层查,逐步细化到某一个页。然后从一个页中尝试去获取一条对应的记录,查找过程类似下图:

上一篇下一篇

猜你喜欢

热点阅读