Mysql页的基本概念

mysql与磁盘交互的基本单位是页而不是一条记录,页的大小是16k,对应的系统变量是innodb_page_size

页的类型

页名称描述
FILE_PAGE_UNDO_LOGundo日志页
FILE_PAGE_INODE段信息页
FILE_PAGE_IBUF_BITMAPchange buffer属性页
FILE_PAGE_FREE_LISTchange buffer空闲列表
FILE_PAGE_TYPE_SYS系统数据页
FILE_PAGE_TYPE_TRX_SYS事务数据页
FILE_PAGE_FSP_HDR表空间信息页
FILE_PAGE_TYPE_XDES区属性页
FILE_PAGE_BLOB溢出页
FILE_PAGE_INDEX数据页

数据页的构成

在这里插入图片描述
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的校验和一起校验数据的准确性

综合

数据行格式的next_record属属性是指向下一条真实数据的指针,所以页里面的数据行形成一个单向链表,页与页之间通过File Header里面的上一页/下一页指针形成双向链表:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值