InnoDB数据存储结构

一、数据库的存储结构

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

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

  1. InnoDB 将数据划分为若干个页,InnoDB中页的大小默认为 16KB
  2. 以页作为磁盘和内存之间交互的基本单位,也就是一次最少从磁盘中读取16KB的内容到内存中,一次最少把内存中的16KB内容刷新到磁盘中。也就是说,在数据库中,不论读一行,还是读多行,都是将这些行所在的页进行加载。也就是说,数据库管理存储空间的基本单位是页 (Page),数据库i/0 操作的最小单位是页。一个页中可以存储多个行记录。
  3. 记录是按照行来存储的,但是数据库的读取并不以行为单位,否则一次读取(也就是一次 I/O 操作)只能处理一行数据,效率会非常低。

1.2 页的结构

名称占用大小说明
File Header38字节文件头,描述页的信息
Page Header56字节页头,页的状态信息
Infimum+Supremum26字节最大记录和最小记录,这是两个虚拟的行记录
User Records用户记录,存储行记录的信息
Free Space空闲记录,页中还未被使用的空间
Page Directory页目录,存储用户记录的相对位置
File Trailer8字节文件尾,校验页是否完整

1.2.1 File Header(文件头)结构

名称作用
FIL_PAGE_OFFSET (4字节)页号
FIL_PAGE_TYPE (2字节)页的类型
FIL_PAGE_PREV / NEXT (4字节)指向前一页或后一页
FIL_PAGE_SPACE_OR_CHKSUM (4字节)校验和,检验页是否完整
FIL_PAGE_LSN (8字节)最后被修改时日志的位置

1.3 行格式

1.3.1 操作行格式的语法

# 创建表时指定行格式
CREATE TABLE tb1 (id int, lname varchar(20)) row_format='行格式名字';


# 查看表的行格式
SHOW TABLE STATUS LIKE '%表名字%'\G


# 修改表的行格式
ALTER TABLE '表名' row_format='行格式';

1.3.2 行格式的分类

COMPACT行格式

  1. 变长字段长度列表
  2. NULL值列表
  3. 记录头信息(5字节)
  4. 记录的真实数据
    1. 列名 

      是否必须

      描述

      row_id(6字节)行ID,唯一标识一条记录
      transaction_id(6字节)事务ID
      roll_pointer(7字节)回滚指针
    2. 真实数据

Dynamic和Compressed行格式

Redundant行格式  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李吱恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值