说明
1、页是 InnoDB 中管理数据的最小单元。Buffer Pool 中存的就是一页一页的数据。
2、往MySQL插入的数据最终都是存在页中的。在 InnoDB 中的设计中,页与页之间是通过一个双向链表连接起来。
数据页构成
File Header
描述页的校验和,页号,上/下页的指针,页的类型,页属于哪个表空间等信息
Page Header
记录了有多少个slot,空闲空间的偏移量,已经存储了多少条数据等信息
Infimum+Supremum
这两个并非是用户插入的数据,是虚拟列,Infimum代表着当前页中最小的数据行,Supremum代表当前页中数据行(按照主键排序的大小),User records记录都位于它们之间,并且通过每条记录的行格式中的一些属性(next_record)形成按照主键排列顺序的数据链表,再加上最小的虚拟行Infimum与Supremum就组成了当前页的数据链表。
User records
用户插入的数据行
Free sparce
当前未存放用户数据的空间
Page Directory
如果一行数据长度比较小,比如表只有一个int类型的id字段,那么一个页中会存放非常多的行记录。如果查询数据就需要遍历页中所有的记录取出满足select条件的数据,这样的话遍历速度会比较慢。Page Directory存放了很多slot,slot存放着每个组中数据行的偏移量,数据链表是按照主键排列有序的,所以Page Directory可以使用二分查找法快速定位要插入与快速查找的数据在页中的位置.组的生成逻辑三言两语说不清楚,可以直接理解成,对于当前页中的数据行进行横向划分,大部分组中数据有4-8行。
File Trailer
存储了校验和LSN,与File Header的校验一起校验数据的准确性。
以上就是mysql页的概念分析,希望对大家有所帮助。更多mysql学习指路:MySQL
推荐操作系统:windows7系统、mysql5.8、DELL G3电脑