MySql(30)InnoDB数据存储结构

数据库存储结构:页

索引结构给我们提供了高效的索引方式,不过索引信息以及数据记录都是保存在文件上的,确切的说时存储在页结构中
。另一方面,索引是在存储引擎中实现的,MySQL服务器上的 存储引擎 负责对表中数据的读取和写入工作。不同存储引擎中
存放的格式 一般是不同的,甚至 Memory引擎都不用磁盘来存放。

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

InnoDB将数据划分位若干个页,InnoDB的大小默认为16kb

作为磁盘和内存之间交互的 基本单位 ,也就是一次最少从磁盘中读取16KB的内容到内存中,一次最少把内存中的16KB内容刷新到磁盘中。也就是说,
在数据库中,无论读一行,还是多行,都是将这些行所在的页进行加载。也就是说,数据库 I/O操作的最小单位就是页

在这里插入图片描述

页结构概述

页与页之间 不在物理结构上相连 只需要通过双向链表相关联即可。每个数据页中的记录会按照主键值从小到大组成 单向链表

单向链表优势在于插入和删除操作速度快速,但查找却只能遍历,于是在页中还有 页目录 是一个数组这样就可以使用 二分法快速找到数据。

页的上层结构

在这里插入图片描述

    • 是比页大一级的存储结构,一个区会分配 64个连续的页。一个区的大小是 64 * 16KB = 1024KB = 1MB
    • 由多个区组成,区在文件系统中是一个连续分配的空间,不过段中不要求区与区之间是相邻的 段时数据库中分配单位 不同类型的数据库对象以不同的段形式存在
    • 创建一张表会创建一个表段,创建一个索引会创建一个索引段
  • 表空间
    • 是一个逻辑容器,表空间存储的对象是段,在一个表空间中可以有一个或多个段,但是一个段只能属于一个表空间。数据库由一个或多个表空间组成。
      表空间从管理上划分可以分为 系统表空间 用户表空间 撤销表空间 临时表空间 等。

页的内部结构

常见的页有 数据页(B+Tree的节点)系统页Undo页事务数据页等。

数据页的 16kb 被划分为7个部分。

名称占用大小说明
File Header 文件头38字节描述页的信息
Page Header 页头56字节页的状态信息
Infimum + Supremum 最大记录和最小记录26字节两个虚拟行记录
User Records 用户记录不确定存储行记录内容
Free Space 空闲记录不确定页中还没被使用的空间
Page Directory 页目录不确定存储用户记录的相对位置
File Trailer 文件尾8字节校验页是否完整

第一部分 文件头和文件尾

文件头

作用:描述各种页的通用信息

在这里插入图片描述

文件尾

在文件尾中只有 FIL_PAGE_SPACE_OR_CHKSUM 和 FIL_PAGE_LSN

用于配合文件头校验 该页是否完整更新

第二部分 空闲空间、用户记录和最大最小记录

  • 空闲空间
    • 当我们每插入一条记录,都会从空闲空间中申请一个记录大小的空间划划分到用户记录部分。
  • 用户记录
    • 其中的记录按照指定的 行格式 存放,互相之间形成 单链表
    • 单链表形成与 行格式的记录头信息 有关
  • 最大最小记录
    • 不是我们定义的,存放在一个叫做 Infimum + Supremum 的部分

第三部分 目录页、页面头部

  • 目录页
    • 记录是以 单向链表的形式存储的,插入和删除速度快。但检索效率不高所以专门给记录做了一个目录,通过二分法查找提升效率。
  • 页面头部
    • 得到一个数据页存储的记录的状态信息
      快。但检索效率不高所以专门给记录做了一个目录,通过二分法查找提升效率。
  • 页面头部
    • 得到一个数据页存储的记录的状态信息
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值