Mysql-页及行格式
2021-07-28 12:21:18 0 举报
AI智能生成
Mysql-页及行格式
作者其他创作
大纲/内容
MySQL
存储引擎
种类
InnoDB
记录结构
行格式
COMPACT
记录的额外信息
变长字段长度列表
NULL值列表
记录头信息
预留位1
1bit
没有使用
预留位2
delete_mask
标记该记录是否被删除
min_rec_mask
B+树的每层非叶子节点中的最小记录都会添加该标记
n_owned
4bit
表示当前记录拥有的记录数
heap_no
13bit
表示当前记录在记录堆的位置信息
record_type
3bit
表示当前记录的类型
0-->普通记录
1-->B+数非叶子节点
2-->最小记录
3-->最大记录
next_record
16bit
表示下一条记录的相对位置
记录的真实数据
REDUNDANT
字段长度偏移列表
字段头信息
DYNAMIC
COMPRESSED
数据页
属性
大小
16KB
存放表空间头部的页
存放Insert Buffer信息的页
存放INODE信息的页
存放undo日志信息的页
索引页(存放记录的页)
结构
文件头部(File Header)
占用空间大小
38字节
描述
页的一些通用信息
FIL_PAGE_SPACE_OR_CHKSUM
占用空间
4字节
FIL_PAGE_OFFSET
页号
FIL_PAGE_PREV
上一个页的页号
FIL_PAGE_NEXT
下一个页的页号
FIL_PAGE_LSN
8字节
页面被最后修改时对应的日志序列位置(英文名是:Log Sequence Number)
FIL_PAGE_TYPE
2字节
该页的类型
类型
FIL_PAGE_TYPE_ALLOCATED
值(16进制)
0x0000
最新分配,还没使用
FIL_PAGE_UNDO_LOG
0x0002
Undo日志页
FIL_PAGE_INODE
0x0003
段信息节点
FIL_PAGE_IBUF_FREE_LIST
0x0004\t
Insert Buffer空闲列表
FIL_PAGE_IBUF_BITMAP
0x0005
Insert Buffer位图
FIL_PAGE_TYPE_SYS
0x0006
系统页
FIL_PAGE_TYPE_TRX_SYS
0x0007
事务系统数据
FIL_PAGE_TYPE_FSP_HDR
0x0008\t
表空间头部信息
FIL_PAGE_TYPE_XDES
0x0009
扩展描述页
FIL_PAGE_TYPE_BLOB
0x000A
溢出页
FIL_PAGE_INDEX
0x45BF\t
索引页,也就是我们所说的数据页
FIL_PAGE_FILE_FLUSH_LSN
仅在系统表空间的一个页中定义,代表文件至少被刷新到了对应的LSN值
FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID
页属于哪个表空间
页面头部(Page Header)
56字节
数据页专有的一些信息
PAGE_N_DIR_SLOTS
在页目录中的槽数量
PAGE_HEAP_TOP
还未使用的空间最小地址,也就是说从该地址之后就是Free Space
PAGE_N_HEAP
本页中的记录的数量(包括最小和最大记录以及标记为删除的记录)
PAGE_FREE
第一个已经标记为删除的记录地址(各个已删除的记录通过next_record也会组成一个单链表,这个单链表中的记录可以被重新利用)
PAGE_GARBAGE
已删除记录占用的字节数
PAGE_LAST_INSERT
最后插入记录的位置
PAGE_DIRECTION
记录插入的方向
PAGE_N_DIRECTION
一个方向连续插入的记录数量
PAGE_N_RECS
该页中记录的数量(不包括最小和最大记录以及被标记为删除的记录)
PAGE_MAX_TRX_ID
修改当前页的最大事务ID,该值仅在二级索引中定义
PAGE_LEVEL
当前页在B+树中所处的层级
PAGE_INDEX_ID
索引ID,表示当前页属于哪个索引
PAGE_BTR_SEG_LEAF
10字节
B+树叶子段的头部信息,仅在B+树的Root页定义
PAGE_BTR_SEG_TOP
B+树非叶子段的头部信息,仅在B+树的Root页定义
最小记录和最大记录(Infimum+Supremum)
26字节
两个虚拟的行记录
用户记录(User Records)
不确定大小
实际存储的行记录内容
空闲空间(Free Space)
页中尚未使用的空间
页目录(Page Directory)
页中的某些记录的相对位置
槽 slot
文件尾部(File Trailer)
校验页是否完整
前4字节
页的校验和
后4字节
页面被最后修改时对应的日志序列位置(LSN)
……
MyISAM
Memory
查询支持
SHOW ENGINES;
创建表时指定
CREATE TABLE 表名(建表语句) ENGINE = 存储引擎名称;
CREATE TABLE engin_demo_table(i int) ENGINE = MyISAM;
修改表引擎
ALERT TABLE 表名 ENGINE = 存储引擎名称;
ALERT TABLE engine_demo_table ENGINE=InnoDB;
收藏
收藏
0 条评论
下一页