目次
一、快速走进索引页布局
(一)团体展示分析
(二)内容分析
File Header(文件头部)
Page Header(页面头部)
Infimum + Supremum(最小纪录和最大纪录)
User Records(用户纪录)
Free Space(空闲空间)
Page Directory(页面貌次)
File Trailer(文件尾部)
二、索引页与纪录行的简单关系分析
(一)数据页的双向链表布局
(二)纪录行的单向链表布局
三、InnoDB 数据页中的 User Records 与 Free Space
(一)页满前的处置惩罚
初始状态
存储过程
(二)页满后的处置惩罚
紧张参考和学习泉源
干货分享,感谢您的阅读!快速相识索引页布局和数据行的直接关系。条件知识如下:
| 文章分析 | 详细链接 | 数据行格式内容分析
| 探究InnoDB Compact行格式背后-CSDN博客 | | 数据行头信息各个属性探究 | 剖析MYSQL行头信息数据行格式分析_jdk 协程-CSDN博客 | | 剖析数据行内部单向链表计谋 | 数据库纪录行在页内查询探索分析_查抄代码中循环依靠-CSDN博客 | 一、快速走进索引页布局
在InnoDB存储引擎的天下里,数据存储和管理就像是一座繁忙而有序的都会。在这座都会中,每一块16KB巨细的土地都被称为一个“页”(Page),而这些页是都会底子办法的核心,其主角就是“索引页”(INDEX页),这些页专门用于存储我们表中的实际纪录数据,因此也被称为“数据页”(Data Page)。
(一)团体展示分析
索引页就像是都会中的一栋多层大厦。这栋大厦不但要存放数据,还必要具备高效的检索功能。为了到达这个目标,InnoDB利用了一种高效的B+树布局,每个索引页就是这棵大树上的一个节点。索引页的巨细固定为16KB,这个巨细颠末优化,既能高效利用磁盘空间,又能在内存中快速读取。团体页展示如下:
在这栋大厦中,各个部门各司其职,确保数据的高效存储和快速访问。File Header是大厦的门卫,Page Header是楼层管理,Infimum和Supremum是地基和天花板,User Records是住民,Free Space是预留的空房间,Page Directory是导航体系,File Trailer是安防体系。
(二)内容分析
File Header(文件头部)
占用空间38 字节,文件头部存储了页的一些底子信息:
- Page Type(页范例):标识该页的范例(如数据页、索引页)。
- Page Number(页号):当前页在表空间中的唯一编号。
- Checksum(校验和):用于检测页在读写过程中的完备性。
具像化明白:就像是办公楼的铭牌,纪录了楼的根本信息和身份标识。
Page Header(页面头部)
占用空间56 字节,页面头部包罗数据页特有的信息:
- Number of Records(纪录数量):当前页中存储的纪录数量。
- Free Space Pointer(空闲空间指针):指向页中第一个可用的空闲空间位置。
- Heap Top(堆顶位置):纪录当前页中数据存储的最高位置。
- Page Level(页级别):体现当前页在 B+ 树中的层级。
具像化明白:相当于楼的管理办公室,纪录了楼内的各种管理信息,如有多少办公室空闲。
Infimum + Supremum(最小纪录和最大纪录)
占用空间26 字节,这两个假造纪录用于界说页中的纪录范围:
- Infimum Record(最小纪录):一个特殊的最小纪录,用于标示页的起始。
- Supremum Record(最大纪录):一个特殊的最大纪录,用于标示页的竣事。
具像化明白:雷同楼的底子和屋顶,标示了楼的出发点和止境。
User Records(用户纪录)
占用空间不确定,实际存储的用户数据纪录:
- Record Header(纪录头部):包罗纪录的元数据,比方纪录长度和下一条纪录的指针。
- Record Data(纪录数据):实际的数据内容,包罗各字段的值。
具像化明白:实际的办公室,内里有员工在工作,纪录了详细的数据内容。
Free Space(空闲空间)
占用空间不确定,空闲空间用于存储新插入的纪录,随着纪录的插入,空闲空间徐徐淘汰:
- Insertions(插入):当有新纪录插入时,体系会在此地区探求符合的空闲位置。
- Deletions(删除):删除纪录后,空间会返回到空闲地区供新纪录利用。
具像化明白:尚未出租的办公室,未来可以容纳新的员工(数据)。
Page Directory(页面貌次)
占用空间不确定,页面貌次包罗纪录的相对位置,用于快速检索纪录:
- Directory Slots(目次槽):指向页中各纪录的位置,便于快速定位和检索。
- Efficiency(服从):通过目次可以快速定位纪录,进步检索服从。
具像化明白:大楼的导览图,资助快速找到特定的办公室(纪录)。
File Trailer(文件尾部)
占用空间8 字节,文件尾部包罗校验信息,用于验证页的完备性:
- Checksum(校验和):再次验证页的数据完备性,确保数据在读写过程中未被粉碎。
具像化明白:大楼的安保体系,确保大楼的安全和完备性。
二、索引页与纪录行的简单关系分析
在 InnoDB 中,数据页通过双向链表毗连,每个数据页内的纪录行按照主键值从小到大的次序构成单向链表,而且每个数据页都有一个页目任命于快速定位纪录。
查找纪录时,先在页目次中利用二分法定位到特定槽,再在该槽对应的纪录组中次序遍历找到目标纪录。通过这种计划,InnoDB 可以或许高效地管理和查找数据,确保数据库体系的高性能和可靠性。
(一)数据页的双向链表布局
每个数据页被构造成一个双向链表,这意味着每个数据页都有指向前一个页和后一个页的指针(File Header 纪录了页的底子信息和链表指针)。通过这种双向链表布局,InnoDB 可以方便地举行数据页的插入、删除和遍历操纵。这种计划包管了数据页之间的高效毗连和管理。
(二)纪录行的单向链表布局
在每个数据页中,纪录行按照主键值从小到大的次序构造成一个单向链表。这种有序的布局使得在数据页内查找纪录变得更加高效。每条纪录不但存储了自身的数据,还包罗指向下一条纪录的指针,如许可以次序遍历纪录。
每个数据页都有一个页目次,页目次可以看作是数据页内的索引布局。页目次将纪录分成多个组,每个组在页目次中都有一个槽。通过页目次,InnoDB 可以快速定位到特定纪录地点的组,从而淘汰遍历纪录的时间。
当必要通过主键查找某条纪录时,InnoDB 会先在页目次中利用二分法快速定位到对应的槽。页目次中的槽指向该槽对应的纪录组,接着在该组中遍历纪录,直到找到目标纪录。这种查找过程团结了二分查找温次序遍历的优点,既高效又准确。
三、InnoDB 数据页中的 User Records 与 Free Space
InnoDB 数据页中的 User Records 和 Free Space 部门密切相干。随着纪录的不绝插入,Free Space 部门的空间会徐徐分配给 User Records 部门,直到 Free Space 被完全斲丧。当一个数据页满了之后,InnoDB 会申请新的数据页并将其链接到现有的双向链表中,继续存储新的纪录。也就是在页未满前页的存储紧张在User Records 和 Free Space发生,页满后将触到达双向链表页中。
(一)页满前的处置惩罚
初始状态
- User Records:初始为空,没有实际数据存储。
- Free Space:占据大部门页空间,等候新纪录的插入。
存储过程
- 纪录插入:当用户插入一条纪录时,体系会从 Free Space 部门中申请一个符合巨细的空间用于存储这条纪录。这条纪录被存储到 User Records 部门。
- 空间调解:随着纪录的插入,User Records 部门徐徐增大,存储越来越多的用户数据。同时,Free Space 部门的可用空间淘汰,徐徐被 User Records 部门替换。
- 页满状态:当 Free Space 部门被完全斲丧,整个数据页被 User Records 部门占据,意味着该页已满,无法再存储新的纪录。
(二)页满后的处置惩罚
当一个数据页中的 Free Space 部门被完全替换为 User Records 部门后,该页就被以为已满。此时,InnoDB 会实行以下操纵:
- 申请新的数据页:数据库引擎会在表空间中申请一个新的数据页,以继续存储新的纪录。
- 更新链表指针:新申请的数据页会被链接到现有的数据页双向链表中,确保数据页之间的有序毗连。
- 维护 B+ 树布局:假如涉及到索引页,InnoDB 会维护 B+ 树布局,确保新的数据页在树中的精确位置。
紧张参考和学习泉源
《MySQL 是怎样运行的:从根儿上明白 MySQL》
MySQL InnoDB 索引 (INDEX) 页布局 - doubtful - 博客园
https://juejin.cn/post/7216914115260301367
mysql数据页和索引页 | Young 小站
一文带你相识MySQL之InnoDB 数据页布局-阿里云开发者社区
https://www.51cto.com/article/702315.html
Mysql之InnoDB数据页(索引页)布局剖析 流程图模板_ProcessOn头脑导图、流程图
如许明白Mysql索引,阿里口试官也给你点赞_MySQL_慕枫技能条记_InfoQ写作社区
https://www.51cto.com/article/777873.html
MySQL怎么运行的系列(四)Innodb索引布局和方案-张柏沛IT博客
InnoDB的Page布局 | JieSunn - BLOG
【MySQL】InnoDB行格式、数据页布局以及索引底层原理分析_牛客博客
27丨从数据页的角度明白B+树查询-SQL必知必会-极客时间
OceanBase 社区
页和区体系布局指南 - SQL Server | Microsoft Learn
MySQL InnoDB 聚集索引数据布局 | ellendan
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |