InnoDB的索引方案推演

一、索引底层

InnoDB使用页来作为管理存储空间的基本单位,最大的连续存储空间限定为16KB。

索引底层的组成为实际的数据页。数据页中每条数据记录的组成包括:

  • record_type:记录头信息的一项属性,表示记录的类型
    • 0 表示数据记录、 1 表示目录项记录、 2 表示最小记录、 3 表示最大记录。
  • next_record:记录头信息的一项属性,表示下一条地址相对于本条记录的地址偏移量。
  • 各个列的值:记录实际的列数据。
  • 其他信息 :除了上述3种信息以外的所有信息,包括其他隐藏列的值以及记录的额外信息。

二、第一层:目录项记录的页

  • InnoDB对底层数据页进行管理的就是其上层的目录页。InnoDB采用目录项记录的形式来灵活管理所有的目录项。
  • 每次查找数据,都将选定的页加载到内存当中,尽可能降低IO次数。
  • InnoDB使用record_type来区分目录项记录和数据记录,然后还使用字段记录本页主键起始值和页号。注意,记录头信息中有一项 min_rec_mask 属性用于标记最小的主键值,值为1表示为最小主键值。
  • 根据某个主键值去查找记录的步骤:
    • 先从上级目录项记录页的Page Directory(页目录),通过二分法快速定位到目录项;
    • 再到目录项记录的页,在其Page Directory(页目录)中,使用二分法快速定位到设定主键值的数据上。
    • 注意:所有数据页都会为主键值生成Page Directory(页目录), 从而在按照主键值进行查找时,可以直接对页目录使用二分法来加快查询速度 。

 3532310c528b3fa45b43cb9fedf51739.png

三、第二层:多个目录项纪录的页

针对多次迭代的情况,可以创建目录项记录页的目录页,从而进一步进行管理。

实际效果图就如下图所示,该数据结构也就是B+树。

注意:使用的B+树一般不会超过4层,常用场景3层B+树已经足够存储数据。层数越多,IO次数越多,3层就需要3次IO。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值