4.1索引组织表
如果在创建表时没有显式地定义主键,则InnoDB存储引擎会按照如下方式选择或者创建主键:
- 首先判断表中是否有非空的唯一索引,如果有,则该列为主键
- 如果不符合以上条件,InnoDB存储引擎自动创建一个6字节大小的指针
当表中有多个非空唯一索引时,InnoDB存储引擎将选择第一个定义的非空唯一索引为主键。需要注意的是,主键的选择是根据定义索引的顺序,而不是建表时列的顺序。
当没有显示的声明主键或者声明单列主键时,可以用_rowid来查询自动生成的表的主键;_rowid只能用于查询单个列表作为主键的情况,对于多列组成的主键无能为力
4.2InnoDB逻辑存储结构
所有数据被逻辑的存放在表空间中,表空间又由段segment,区extent,页page组成。
4.2.1表空间
4.2.2段
常见的段有数据段、索引段和回滚段。
数据段即B+树的叶子节点,索引段即为B+树的非叶子节点。
4.2.3区
区是由连续页组成的空间,在任何情况下每个区的大小都为1MB。为了保证区中页的连续性,InnoDB存储引擎一次从磁盘申请4~5个区。在默认情况下,InnoDB存储引擎页的大小为16KB,即一个区中一共有64个连续的页