InnoDB存储引擎表

简单来说,表是关于特定实体的数据集合,这也是关系型数据库模型的核心

索引组织表

在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表。

在InnoDB存储引擎表中,每张表都有个主键(primary key),如果在创建时没有显式得定义主键,则会按如下方式选择主键:

  • 首先判断表中是否存在非空的唯一索引(unique not null),如果有,该列即为主键
  • 如果不满足上面的条件,InnoDB存储引擎会自动创建一个6字节大小的指针。

select _rowid from student;

_rowid显示表的主键,但只能用于查看单个列为主键的情况。

InnoDB的逻辑存储结构

InnoDB逻辑存储结构

所有的数据都被逻辑的放在一个表空间中,表空间由段、区、页组成。

表空间

表空间分为共享空间和独立空间,分别通过参数innodb_data_file_path和参数innodb_file_per_table来管理设定。

表空间是由各个段组成的,常见的段有数据段、索引段、回滚段等。
数据段即为B+树的叶子节点,索引段即为B+树的非叶子节点。
在InnoDB存储引擎中,对段的管理都是由引擎自身所完成的。

区是由连续页组成的空间。在任何情况下每个区的大小都是1MB。
为了保证区中页的连续性,存储引擎一次性从磁盘中申请4-5个区,默认情况下,InnoDB存储引擎页的大小为16LKB,即一个区中一共有64个连续的页。

InnoDB1.0版本开始引入压缩页。通过参数KEY_BLOCK_SIZE设置页的大小为2K,4K,8K
InnoDB1.2.x版本新增参数innodb_page_size,可以设定默认页的大小为4K,8K,但是页中的数据不是压缩的。
不管页的大小如何变化,区的大小永远是都是1M

这里有个问题:在用户启用了参数innodb_file_per_table后,创建的表的默认大小为96KB。区中是64个连续的页,创建的表的大小至少是1MB才对啊?
这是因为在每个段开始的时候,先用32个碎片页来存放数据,在使用完后才是64个连续页的申请。这样做的目的是,对于一些小表,或者是undo这类的段,可以在开始时申请较少的空间,节省磁盘容量的开销。

页是磁盘管理的最小单位。
默认大小是16KB,可以通过参数innodb_page_size进行设定。有一点要注意,通过这个参数改变设定后,所有表中的页的大小都为innodb_page_size,不可以再对其进行再次修改,除非通过mysqldump导入导出操作来产生新的库。

常见的页类型:

  • 数据页
  • undo页
  • 系统页
  • 事务数据页
  • 插入缓冲位图页
  • 插入缓冲空闲列表页
  • 未压缩的二进制大对象页
  • 压缩的二进制大对象页

数据是按行存储的。
每个页存放的行记录是有硬性定义的。最多允许存放16KB/2-200行的记录,即7992行记录。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值