美文网首页程序员
InnoDB-B+树索引[一]

InnoDB-B+树索引[一]

作者: 辛未_杨 | 来源:发表于2018-07-16 14:37 被阅读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地址。所有的非叶节点都相当于构成一层索引,从一个粗略的根页往下层查,逐步细化到某一个页。然后从一个页中尝试去获取一条对应的记录,查找过程类似下图:

    相关文章

      网友评论

        本文标题:InnoDB-B+树索引[一]

        本文链接:https://www.haomeiwen.com/subject/tfsvpftx.html