MySQL存储引擎InnoDB详解(三)逻辑存储结构

一、索引组织表

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

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

  • 首先判断表中是否有非空的唯一索引(Unique NOT NULL),如果有,即作为主键

  • 当表中有多个非空唯一索引时,InnoDB存储将选择建表时第一个定义的非空唯一索引为主键。

  • 如果不符合上述条件,InnoDB存储引擎自动创建一个6字节大小的指针。

二、InnoDB逻辑存储结构

  从InnoDB存储引擎的逻辑存储结构看,所有数据都被逻辑地存放在一个空间中,称之为表空间(tablespace)。表空间又由段(segment)、区(extent)、页(page)组成。

在这里插入图片描述

2.1 表空间

  默认共享表空间ibdata1,所有数据都存放在这个表空间内。
  如果启用了参数innodb_file_per_table,则每张表内的数据可以单独放到一个表空间内,但回滚(undo)信息,插入缓冲索引页、系统事务信息、二次写缓冲(Double write buffer)等还是存放在原来的共享空间内。

2.2 段

  表空间由各个段组成,常见段有数据段、索引段、回滚段等。

  InnoDB存储引擎表是索引组织的,因此数据即索引,索引即数据。那么数据段即为B+树的叶子节点,索引段即为B+树的非叶子节点。

2.3 区

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

2.4 页

  同大多数数据库一样,InnoDB有页(Page)的概念(也可以称为块),页是InnoDB磁盘管理的最小单位。在InnoDB存储引擎中,默认每个页的大小为16KB。而从InnoDB 1.2.x版本开始,可以通过参数innodb_page_size将页的大小设置为4K、8K、16K。若设置完成,则不可以再次修改。除非通过mysqldump导入和导出操作产生新的库。

2.5 行

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

  还有面向列(column-oriented)的数据库,如MySQL infobright存储引擎、Sybase IQ、Google Big Table。面向列的数据库对于数据仓库下的分析类SQL语句的执行及数据压缩非常有帮助,是当前数据库发展的一个方向。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值