索引组织表与InnoDB逻辑存储结构

  1. 索引组织表
  2. InnoDB逻辑存储结构
    • 表空间
1. 索引组织表

​ 在InnoDB存储引擎中,表都是根据住建顺序组织存放的,这种存放方式的表称为索引组织表。每一张表都有个主键,如果在创建表时没有显示的定义主键,会按照如下方式选择或创建主键:

  • 先判断表中是否有非空的唯一索引,有,则该列为主键;
  • 上述条件不符合,InnoDB引擎会自动创建一个6字节大小的指针。

注:当表中有多个非空唯一索引时,会选择建表时第一个定义的非空唯一索引为主键

_rowid可以显示表的主键,需要注意的是, _rowid只能用于查看单个列为主键的情况,对于多列组成的主键就显得未能为力了。

2. InnoDB逻辑存储结构

从InnoDB存储引擎的逻辑存储结构来看,所有的数据都被逻辑的存放在一个空间中,称为表空间。表空间又由段、区、页组成。页在一些文档中也称为块。如下图1:

在这里插入图片描述

2.1 表空间

表空间可以看做是InnoDB存储引擎逻辑结构的最高层,所有的数据都存放在表空间中。在默认情况下,有一个共享表空间ibdatal,即所有数据都存放在这个表空间内。

如果用户启用了参数innodb_file_per_table,则每张表内的数据可以单独放到一个表空间内,需要注意的是每张表的表空间内存放的只是数据、索引和插入缓冲Bitmap页,其他类的数据,如回滚信息、插入缓冲索引页、系统事务信息,二次写缓冲等还是存放在原来的共享表空间内。说明即使启用了参数innodb_file_per_table之后,共享表空间还是会不断的增加其大小。

2.2 段

图1显示了表空间是有各个段组成的,常见的段有数据段、索引段、回滚段等。数据段即为B+树的叶子结点,索引段即为B+树的非索引节点,回滚段较为特殊。在InnoDB存储引擎中,对端的管理都是有引擎自身所完成,DBA不能也没有必要对其进行控制。

2.3 区

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

InnoDB1.0x版本开始引入压缩页,即每个页的大小可以通过参数KEY_BLOCK_SIZEs设置为2K、4K、8K,因此每个区対应页的数量就应该为512、256、128。

InnoDB1.2x版本新增了参数innodb_page_size,通过该参数可以将默认页的大小设置为4K、8K,但是页中的数据库不是压缩。这是区中页的数量也为256、128。总之,不论页的大小怎么变化,去的大小总是为1M。

2.4 页

页是InnoDB磁盘管理的最小单位,默认每个页的大小为16KB。从InnoDB1.2x版本开始,可以通过参数innodb_page_size将夜的大小设置为4K、8K、16K。

InnoDB引擎常见的页的类型有:

  • 数据页(B-tree Node)
  • undo页(undo log Page)
  • 系统页(System Page)
  • 事务数据页(Transaction system Page)
  • 插入缓冲位图页(Insert Buffer Bitmap)
  • 插入缓冲空闲列表页(Insert Buffer Free List)
  • 未压缩的二进制大对象页(Uncompressed BLOB Page)
2.5 行

InnoDB存储引擎是面向列的(row-oriented),也就是说数据是按行进行存放的。每个页存放的行记录也是有硬性定义的,最多允许存放15KB/2-200行的记录,即7992行记录。

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值