哪些网站可以上传自己做的视频,穿越之游戏开发系统,东莞网站建设做网站,做网站三网多少钱1、存储结构-页
索引结构提供了高效的索引方式#xff0c;索引信息以及数据记录都保存在数据文件或索引文件中#xff08;本质存储在页结构中#xff09;
1.1、磁盘与内存交互的基本单位#xff1a;页
在InnoDB中将数据划分为若干页#xff0c;页的默认大小为#xff…1、存储结构-页
索引结构提供了高效的索引方式索引信息以及数据记录都保存在数据文件或索引文件中本质存储在页结构中
1.1、磁盘与内存交互的基本单位页
在InnoDB中将数据划分为若干页页的默认大小为16KB。不论读多少条数据都是将这些数据所在的页进行加载。磁盘I/O操作最小单位是页。
1.2、页的结构
相关数据页可以不在物理结构上相连通过双向链表相关联。每个数据页中的数据记录会按照主键值的大小进行排序组成一个单向链表每个数据页都会为存储的数据记录生成一个目录页通过主键值查找是可以在目录页通过二分法快速定位相关数据记录
1.3、页的大小
通过查找 innodb_page_size参数获取和设置
-------------------------
| Variable_name | Value |
-------------------------
| innodb_page_size | 16384 |
-------------------------
1 row in set (2.89 sec)
1.4、页的上层结构 区是比页大一级的存储结构默认1MB在InnoDB存储结构中一个区会分配64个连续的页。段由一个或多个区组成区在文件系统是一个连续分配的空间并不要求区和区之间是相邻的。段是数据库中的分配单位不同类型的数据库对象以不同的段形式存在。创建表时会创建一个表段创建索引时会创建一个索引段表空间是一个逻辑容器存储的对象是段在一个表空间中可以有一个或者多个段一个段只能属于一个表空间。数据库由一个或多个表空间组成表空间从管理上可以划分为系统表空间用户表空间撤销表空间临时表空间等
2、页的内部结构
名称占用大小说明文件头38字节描述页的信息页面头部56字节页的状态信息最大小用户26字节为两个虚拟的行记录用户记录不确定存储行记录内容空闲空间不确定页中还没有被使用的空间页目录不确定存储用户记录的相对位置文件尾8字节校验页是否完整
2.1、文件头File Header
文件头存储了一些全局性的信息如文件版本、页大小、文件ID等。文件头的大小通常是固定的对于InnoDB的页文件头大小是固定的38字节。文件头位于每个数据文件的开头用于标识文件的类型和属性。主要划分为以下结构 FIL_PAGE_SPACE_OR_CHKSUM页的校验和4字节用于对页的内容进行校验以确保数据完整性和防止损坏。 FIL_PAGE_OFFSET页号4字节每个页都有一个唯一的页号InnoDB通过页号可以定位到具体的页。 FIL_PAGE_PREV上一个页的页号4字节指示上一个页的页号保证了页之间的逻辑连续性。 FIL_PAGE_NEXT下一个页的页号4字节指示下一个页的页号同样保证了页之间的逻辑连续性。 FIL_PAGE_LSN页面最后被修改的日志序列位置8字节记录了页面最后一次被修改时的日志序列位置LSN。 FIL_PAGE_TYPE该页的类型2字节指示该页的类型可能包括数据页、索引页等。 FIL_PAGE_FILE_FLUSH_LSN独立表空间中都是08字节用于记录独立表空间中的文件刷新LSN对于非独立表空间该字段可能有其他用途。 FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID页属于哪个表空间4字节用于指示页属于哪个表空间。
2.2、用户记录User Records
实际存储在页中的数据和索引条目。这些记录按照B树的结构组织在页中叶子节点存储数据记录非叶子节点存储索引记录。记录可以是固定长度或变长根据存储的数据类型和大小而定。主要划分为以下结构 delete_mask 1字节 标记该记录是否被删除 0 表示记录没有删除1 表示记录被删除了 min_rec_mask 1字节 B数的每非叶子节点中的最小纪录数都会添加该标记 只有最小纪录数的min_rec_mask 值为1其他别的记录min_rec_mask 值为0 n_owned 4字节如果当前记录是组内最大记录则代表槽内的记录数heap_no 13字节 当前记录在本页中的位置信息 最小记录的heap_no值0最大记录的heap_no值1 record_type 3字节 表示当前记录的类型 0表示普通记录1表示B树非叶子节点记录2表示最小记录3表示最大记录 next_record 16字节 表示从当前记录的真实数据到下一条记录的真实数据的地址偏移量。
2.3、最大小记录
由5字节大小的记录投信息和8个字节大小的一个固定的部分组成本页中主键值最小的用户记录的下一条记录就是Infimum记录也就是最小记录本页中主键值最大的用户记录的下一条记录就是Supremum记录a也就是最大记录。
2.4、空闲空间Free Space
空闲空间是页中未被使用的部分用于存储新的数据和索引。当页中的自由空间不足时InnoDB会进行页分裂操作将页分成两个更小的页以便腾出更多的空间。
2.5、页目录Page Directory
页目录记录了页中数据和索引的偏移量及长度信息以便InnoDB能够快速地定位和访问这些数据和索引。页目录是由多个槽Slot组成的数组每个槽存储一个记录的偏移量和长度信息。页目录通常位于页头之后占据了页的一部分空间所以在一个页中根据主键查找记录是很快的步骤为两步 二分法确定该记录所在的槽并找到该槽所在分组中主键值最小的那条记录。通过记录的 next_record 属性遍历该槽所在的组中的各个记录
2.6、页面头部Page Header
记录数量Number of Records记录了本页中已经存储的记录数量。第一条记录的地址Address of First Record记录了本页中第一条记录的地址或偏移量以便快速定位到第一条记录。页目录中槽的数量Number of Slots in Page Directory记录了页目录中存储的槽的数量即页目录中有多少个条目。页目录起始地址Address of Page Directory记录了页目录的起始地址或偏移量以便快速定位到页目录。其他状态信息Other Status Information可能还包括其他与页相关的状态信息如空闲空间大小、最大记录偏移量等。通常包含以下信息
名称占用空间大小描述PAGE_N_DIR_SLOTS2字节页目录中的槽数量PAGE_HEAP_TOP2字节还未使用的空间最小地址该地址之后就是 Free SpacePAGE_N_HEAP2字节本页中的记录的数量包括最大最小和标记为删除的记录PAGE_FREE2字节指向可重用空间的地址PAGE_GARBAGE2字节已删除记录占用的字节数PAGE_LAST_INSERT2字节最后插入记录的位置PAGE_DIRECTION2字节最后插入的方向PAGE_N_DIRECTION2字节一个方向连续插入的记录数量PAGE_N_RECS2字节该页中记录的数量不包括最大最小和标记为删除的记录PAGE_MAX_TRX_ID2字节修改当前页的最大事务ID该值仅在二级索引中定义PAGE_LEVEL2字节当前页在索引树B树中的层级PAGE_INDEX_ID8字节索引ID表示当前页属于哪个索引PAGE_BTR_SEG_LEAF10字节B树叶子段的头部信息仅在B树的Root页定义PAGE_BTR_SEG_TOP10字节B树叶子段的头部信息仅在B树的Root页定义
2.7 文件尾File Trailer
文件尾是文件的结束部分通常用于存储一些结束标识或校验信息。文件尾的大小通常是固定的对于InnoDB的数据文件文件尾大小是8字节。通常划分为以下结构 前4个字节代表页的校验和这个部分和 File Header 中的校验和相对应后4个字节代表页面被最后修改时对应的日志序列位置LSN这个部分也是为了校验页的完整性的如果首部和尾部的LSN值校验不成功的话就说明同步传输过程出现了问题。
3、行格式记录格式
3.1 查询InnoDB引擎的默认行格式
语法如下
mysql show variables like innodb_default_row_format;
------------------------------------
| Variable_name | Value |
------------------------------------
| innodb_default_row_format | dynamic |
------------------------------------
1 row in set (0.13 sec)
查看已创建表的行格式
mysql show table status like rqtanc_test\G
*************************** 1. row ***************************Name: rqtanc_testEngine: InnoDBVersion: 10Row_format: DynamicRows: 0Avg_row_length: 0Data_length: 16384
Max_data_length: 0Index_length: 0Data_free: 0Auto_increment: NULLCreate_time: 2024-04-22 06:24:10Update_time: NULLCheck_time: NULLCollation: utf8mb4_0900_ai_ciChecksum: NULLCreate_options: Comment:
1 row in set (0.00 sec)
3.2、指定行格式
创建表时指定行格式
mysql create table rqtanc_one(id int not null,col int null) row_formatcompact;修改表时指定行格式
mysql alter table rqtanc_one row_format dynamic;
Query OK, 0 rows affected (0.82 sec)3.3、分类及相关相关详情描述
参考官方文档
4、表空间
参考 MySQL-数据目录