从数据页的角度看B+树

InnoDB是如何存储数据的

InnoDB是以数据页为单位来读写数据的,数据页大小默认是16KB,每次从磁盘最少读取16KB的数据到内存,或者刷新内存中16KB的数据到磁盘

  • 文件头记录数据页的信息,包括两个指针,一个指向上一个数据页,一个指向下一个数据页

  • UserRecord中存储了行记录,这些记录会通过单向链表按照主键的顺序有小到大排列
  • 单向链表的检索效率比较低,所以数据页中还有一个页目录结构帮助快速查找记录。
  • 数据页中的记录被分为若干组,当然,带有删除标识的不会参与分组;每组中的记录也是按照主键从小到大排序,每组中最后一条记录的主键值最大,它的头信息中记录了本组的记录条数(n_owned字段),页目录记录了每组最大最后一条记录的地址偏移量,叫做,它相当于指针指向了不同组的最后一条记录。
  • 当我们检索数据页中的记录时,由于记录都是按照主键大小排列的,可以使用槽号进行二分法定位某个槽,也就是定位到某一组,然后比较该组的最大记录的主键值,最终定位到某个槽。由于槽都是定位到每组最大的那条记录,所以如果要定位到最小的那条记录,可以通过查找上一个槽的最后一条记录,然后沿着单向链表向后检索

  • 为了减少在某个分组中检索的时间复杂度,InnoDB规定了每个分组的大小
  1. 第一个分组只能有一条记录
  2. 最后一个分组记录条数在1-8之间
  3. 其余分组记录条数在4-8之间

B+树是如何查询的?

InnoDB采用了B+树进行索引,B+树中的每一个节点都是一个数据页
示例查找主键为6的记录

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值