InnoDB-表相关

索引组织表

InnoDB存储引擎中,表都是按主键顺序组织存放的,这种按主键方式存储的表就叫做索引组织表。
在InnoDB的存储引擎表中,每个表都有主键,如果创建表时没定义主键,会按一下方式设定主键:

  • 表中是否有非空的唯一索引,有则把第一个定义的定为主键
  • 如果都不符合则自动创建一个6字节大小的指针来作为主键

InnoDB逻辑存储结构

所有数据都被逻辑地存放在一个空间,这个空间被称为表空间:
在这里插入图片描述

表空间

存储引擎逻辑结构的最高层

表空间由各个段组成,常见的段有数据段(B+树的叶子节点),索引段(B+树的非叶子节点),回滚段等

区是由连续页组成的空间,每个区的大小为1MB,一般InnoDB引擎一次从磁盘申请4-5个区,默认请款页大小为16KB,这时候一个区中有64个连续的页。当页大小改变是区的大小还是1MB

页时innoDB磁盘管理的最小单位。
页的常见类型有:

  • 数据页(B+树叶子节点)
  • undo 页(完整性用的)
  • 系统页
  • 事务数据页
  • 插入缓冲bitmap页
  • 插入缓冲空闲list页
  • 未压缩的二进制大对象页
  • 压缩的二进制大对象页

InnoDB中数据是按行来存放的,如果页大小是16KB,每个页最多允许存放16kb/2-200=7992行记录。
1.2.x版本默认使用Compact行记录格式来保存行:
在这里插入图片描述

  • 变长字段长度列表:若列的长度小于255字节,大小为1字节,否则大小为2字节,表示的是对应变长列(比如vchar)的数据的实际大小,存储顺序是从后往前存。而固定长度类型(比如char)的列当实际长度小于设定长度时会用0x20来填充。
  • NULL标志位:大小为1字节,bitmap标志位,从低到高顺序表示第n个bit对应的第n个列是否为NULL,1表示为NULL,(比如某一行有t1,t2,t3,t4 4个属性,其中t2,t3 为NULL,则NULL标志位的值为 00000110,即0x06,其中的1就是表示第二个,第3个属性为NULL)
  • 记录头信息:固定5字节,含义如下图:next_record的值就是下一个记录的偏移量,这样就把页中的每一行弄成了链表的模式,每一行数据就是页链表中的一个node。
    在这里插入图片描述
  • 实际存储每个列的数据:NULL不占用该部分的任何数据
  • 隐藏列:每行数据除了用户定义的列,还有两个隐藏列,事务ID列表(6字节)和回滚指针列(7字节),如果没有定义主键还会加一个6字节的rowid列

Redundant行记录格式

MySQL5.0版本之前InnoDB的行记录方式。目的是为了兼容之前版本页的页格式,格式如下:
在这里插入图片描述

行溢出数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值