MySQL InnoDB数据存储结构

目录 

1.数据库的存储结构

1.1 磁盘与内存交互基本单位:页

1.2 页结构概述

​1.3 页的大小

1.4 页的上层结构

2.页的内部结构

3.行格式

4.表空间

4.1 独立表空间

4.2 系统表空间


1.数据库的存储结构

1.1 磁盘与内存交互基本单位:页

        MySQL索引信息以及数据记录都是保存在文件上的,确切的说是存储在页的结构中。InnoDB将数据划分为若干个页,默认页的大小为16KB。

        以页作为磁盘和内存交互的基本单位,也就是说在数据库中不论读一行,还是读多行,都是将这些行所在的页进行加载。数据库管理存储空间的基本单位是页,数据库IO操作的最小单位是页。一个页中可以存储多个行记录。

1.2 页结构概述

        页和页之间可以不在物理结构上相连,通过双向链表相关联。每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表,每个数据页都会为存储在它里面的记录生成一个页目录。在通过主键查找某行记录的时候可以在页目录中使用二分法快速定位到对应的槽,然后在遍历该槽对应分组中的记录即可快速找到指定的记录。

1.3 页的大小

        InnoDB默认页大小16KB,可以通过show variables like '%innodb_page_size%'查看

1.4 页的上层结构

        另外在数据库中,还存在着区、段和表空间的概念。行、页、区、段、表空间的关系如下图所示:

        区:比页大一级的存储结构,一个区会分配64个连续的页。

        段:由一个或多个区组成,区在文件系统是一个连续分配的空间,不过在段中不要求区和区之间相邻。段是数据库中的分配单位,不同类型的数据库对象以不同的段形式存在。当我们创建数据表时就会创建一个表段,创建索引的时候就会创建一个索引段。

        表空间:是一个逻辑容器(是真实落在磁盘上的物理文件),存储对象是段,一个表空间中可以有一个或多个段,但是一个段只能属于一个表空间。数据库由一个或多个表空间组成,表空间从管理上可以划分为系统表空间和独立表空间

2.页的内部结构

        如果按照类型来划分的话,常见的有数据页、系统页、undo页和事务数据页等。数据页被划分为七个部分,分别为文件头、文件尾、用户记录、最大最小记录、空闲空间、页目录、页面头部。

3.行格式

        1.行格式的应用都是针对于表的,只有在创建表的时候才能使用row_format,在创建库的时候无法指定行格式。

        2.表的行格式也是决定了这张表下面的物理存储方式,会影响查询和DML操作的性能。

        3.常见的表格式有以下4种:

  • REDUNDANT
  • COMPACT
  • DYNAMIC
  • COMPRESSED

        4.各种行格式特点

4.表空间

4.1 独立表空间

        每个表分配一个表空间,也就是数据和索引信息都会保存在自己的表空间中。独立表空间可以在不同的数据库中进行数据迁移。比如数据库中的一个category表就对应着一个category.ibd文件。

 4.2 系统表空间

        系统表空间的结构和独立表空间基本类似,只不过由于整个MySQL进程只有一个系统表空间,在系统表空间中会额外记录一些有关整个系统信息的页面,这部分是独立表空间中没有的。

        当我们插入一条数据的时候,系统要先校验一下插入语句对应的表是否存在,插入的列和表是否存在,改表的聚簇索引和所有二级索引对应的根页面是哪个页面等。以上这些数据并不是我们使用insert时插入的数据,实际上是为了更好的管理我们用户数据而不得不引入的一些额外数据,这些数据被称为元数据。

        元数据存在于一些内部系统表中,例如SYS_TABLES、SYS_COLUMNS、SYS_INDEXES等。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值