《MySQL怎样运行的》—InnoDB数据页结构

在上一篇文章中我们讲了,InnoDB的数据页是InnoDB管理存储空间的基本单位,一个页的大小基本为16kb
那你有没有疑问,就是说这个InnoDB的数据页的结构是什么样的,还有他这些结构分别有那些功能~接下来我们一一讲解

数据页的总览结构

他既然是一个数据页,那咱们总体概括它的结构的时候,就用一个书页来形容~
在这里插入图片描述
他自上而下分别是

  1. File Header 文件头部 主要作用是保存页的一些通用信息

  2. Page Header 页头部 主要作用是保存数据页的一些专有信息

  3. Inifmum+Supermum 最小记录+最大记录 两个虚拟的记录

  4. User Records 用户记录 主要作用是用户存储的记录内容

  5. Free Space 空闲空间 一些还没有使用的空间

  6. Page Directory 页目录 主要的作用是页中某些记录的相对位置 asda

  7. File Trailer 文件尾部 主要的作用是检查文件是否完整

接下来我们会就这些结构来展开以一个个的讲解,然后3+4统称为记录
下面的讲解我们可能不会按照顺序来进行,先说一下其中的重点记录(3+4)~

记录在页中的存储

我们刚刚说了3+4统称为记录,我们脑子肯定在想,这些记录在页中的流程是什么?那我们就直接上图
在这里插入图片描述
其实在一开始的时候,是没有User Records这一用户空间的,原因很简单,就是因为在一开始我们是没有在里面有任何记录的呀~
当我们添加数据之后,就会往页里面插数据,如上图,当User Records满的时候,Free Space就起作用了~但是当这个Free Space使用完了的时候,这个页就已经使用完毕了,我们就需要创建新的页来储存数据
但是我们再思考一下User Records他怎么管理这些数据的,与我们上一章的内容有关
还记得COMPACT行列式吗他是结构是什么?
是不是变长字段长度列表,NULL值列表,记录头信息,真实的数据。

在记录头信息中的秘密

我们先来回忆下记录头信息的结构
在这里插入图片描述
一共就5个字节,然后40个二进制位;
他们每个的作用

  • delete_mask: 删除标志位,很重要。若此标志位为1,代表这条记录已经被删除了。
  • min_mask:B+树非叶子节点中,索引记录的中最小记录。后面讲到索引的时候再说。
  • n_owned: 分组里面包含的记录总数,分组后面再说。
  • heap_no: 后面再说。
  • record_type:很重要,记录的类型(0-普通用户记录,1-索引记录,2-Infimum,3-Supremum)
  • next_record: 指针,指向下一条记录,很重要。

这上面不是说heap_no后面再说吗?现在就用到了,记录这个记录在页堆中的相对位置
又有疑问了,什么是堆,设计InnoDB的大叔把下面这种记录紧密排列的结构叫做堆
在这里插入图片描述
然后这个heap_no的值为什么我们没有看见0和1记录呢?
这其实是个设计者的小把戏~还记得我们之前说过的Inifmum+Supermum吗?
最小记录与最大记录,他们其实是这个设计者在每条记录前默认加进去的我们可以叫他为伪记录和虚拟记录~
那么我们既然提到了最小与最大,那我就有疑问记录能比较吗?
其实这里我们比较的是主键值的大小,这个东西下一章会详细解释
现在我们讲一下Inifmum与Supremum的结构
他俩的结构其实很简单,就是前面有5个字节的记录头信息+后面的8个字节大小的固定单词哈哈哈哈
Inifmum就他自己,Supermum也是他自己~
另外一点就是heap_no的记录的值在分配之后就不会发生改动了,删掉也不会动。
然后我们说几个比较重要的记录头信息
record_type:很重要,记录的类型(0-普通用户记录,1-索引记录,2-Infimum,3-Supremum)
next_record: 指针,指向下一条记录,很重要
heap_no:记录这个记录在页堆中的相对位置
在这里插入图片描述
上面的图片就比较形象了,然后就是如果你删除一条记录的时候他会发生以下事情

  1. 他的deleted_flag就会变成1
  2. next_record变成0,也就是意味这没有下一条记录了
  3. 上一条的next_record指向该记录的下一条next_record
    然后就是Suoermum的n_owned值由n变为n-1

Page Directory页目录

这个意思就比如说,我们再看书的时候是不是先看目录,这个也一样,书的目录不是分成一个一个组吗,然后找的想要看的页码,然后去找到目标,设计InnoDB的指挥者也为我们设计了一个类似的东西,制作过程就如下:

  1. 先把所有的记录分为几个组(但是不包括垃圾链表的记录)
  2. 然后每个组里的最后一个记录相当于“带头大哥”,组里其他的记录相当于“小弟”,大哥记录里面的头信息的n_owned值为组里一共有多少个记录
  3. 到现在我们没有提到目录,重头戏来了,将每个组里的最后一条记录的地址偏移量提取出来(啥是地址偏移量:就是这个记录的第0个字节到真实数据之间的距离),按照顺序储存在靠近页尾部的地方,这个地方就是页目录~,页目录里面的这些地址偏移量就叫做槽,每个槽占两个字节,页目录就是由多个槽构成的。
    在这里插入图片描述

Page Header页面头部

这个地方就是储存数据页的一些特定状态
在这里插入图片描述

File Header 文件头部

他这个地方就是存放一些通用的状态
在这里插入图片描述

File Trailer 文件尾部

就是前四个字节为校验和
后四个字节代表页最后修改时的对应LSN的后四个字节
用于校验这个文件是否完整

下一章节我们来开始第6章 B+树索引!!!

  • 29
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL InnoDBMySQL 中一种常用的数据存储引擎,其特点是支持事务处理和外键约束,并且具有良好的性能和可伸缩性。 InnoDB数据存储是以表为单位的,每个表都有一个对应的数据文件,用于存储表中的数据。除了数据文件之外,InnoDB 还有一个索引文件,用于存储索引信息。 InnoDB 使用了一种称为 B+ Tree 的算法来存储和维护索引,这种算法使得索引查询的效率很高。同时,InnoDB 还支持自适应哈希索引,可以提高对哈希索引的查询性能。 InnoDB 还有一个叫做缓冲池的功能,用于缓存常用的数据和索引,可以提高数据访问的效率。 总的来说,MySQL InnoDB 是一种高效的数据存储引擎,适用于许多不同的应用场景。 ### 回答2: MySQL InnoDB是一种常用的数据库存储引擎,它提供了可靠、高性能的数据存储方式。 InnoDB使用B+树索引来组织数据,这种索引结构能够快速地定位到所需的数据行,提高了查询速度。此外,InnoDB还支持主键索引、唯一索引、全文索引等多种索引类型,以满足不同的查询需求。 InnoDB还支持事务处理,它能够保证在多个并发操作的情况下,数据的一致性和完整性。当需要进行一系列的数据操作时,可以通过事务来确保这些操作要么全部成功,要么全部失败,避免了数据的不一致性问题。 另外,InnoDB还提供了行级锁和事务隔离级别。行级锁可以在并发操作时,更细粒度地锁定数据行,提高了并发操作的效率。而事务隔离级别则可以控制事务之间的相互影响,避免了数据的混乱和冲突。 此外,InnoDB还支持自动增量列和外键约束。自动增量列可以自动生成唯一标识,简化了开发的复杂度。而外键约束可以保证数据的一致性,防止出现不合法的引用。 总之,InnoDB是一种功能强大的数据存储引擎,它具有高性能、可靠性和完整性保证等特点,适用于各种规模的应用和数据存储需求。 ### 回答3: InnoDBMySQL关系型数据库管理系统中的一种数据存储引擎。它拥有许多独特的特性,可以提供高度的数据完整性和可靠性。 首先,InnoDB使用事务来管理数据的插入、删除和更新操作。这意味着所有的操作要么全部成功完成,要么全部回滚。这保证了数据的一致性和完整性。 其次,InnoDB支持行级锁定。这意味着在并发操作时,只有被修改的行会被锁定,而不是整个数据表。这提高了多用户环境下的并发性能。 另外,InnoDB还支持外键约束。这意味着在不同的表之间创建关联关系,确保数据的一致性和完整性。当删除或更新主表中的记录时,相关的外键记录也会相应进行操作,防止出现数据不一致的情况。 此外,InnoDB还具有自动崩溃恢复的能力。它具有一个称为“重做日志”的机制,可以记录所有在事务中所做的修改,以便在意外崩溃或系统故障后可以恢复数据到事务开始之前的状态。 总的来说,InnoDBMySQL中一种强大的存储引擎,它提供高度的数据完整性和可靠性,同时还具备了高并发性和灵活性。在开发和管理大规模数据库时,InnoDB是一个非常理想的选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值