一、索引组织表
在InnoDB存储引擎中,表是根据主键顺序组织存放的,这种存储方式称为索引组织表。
每张表都有主键,如果创建表时没有显示创建主键,InnoDB会按一下规则创建主键:
-
首先选择表中第一个定义的非空唯一索引(Unique NOT NULL)作为该表的主键。
-
如果不满足1,InnoDB存储引擎会自动创建一个6字节大小的指针。
eg:
创建表:
插入元素:
查询:单主键是只有单个属性时,可以用_rowid显示表的主键。
例子说明:因为b不是非空唯一索引,而c比d晚定义,所以d被选中作为了主键。
二、InnoDB逻辑存储结构
InnoDB存储引擎的逻辑存储结构称为表空间(tablespace),表空间又由段(segment)、区(extent)、页(page)组成,页也称为块(block)。
-
表空间
当启用"innodb_file_per_table":
每张表的数据、索引和插入缓冲页都存放在一个单独的表空间。 每张表的回滚信息、插入缓冲索引页、系统事物信息、二次写缓冲等都存放在一个共享表空间"ibdata1"。
当不启用"innodb_file_per_table":
所有数据都存放在一个共享表空间"ibdata1"。
-
段
表空间是由各个段组成的,常见的段有数据段、索引段、回滚段等
-
区
区由连续的页组成,每个区大小为1MB,页的大小为16KB,即一个区一共有64个连续的区。
-
页
页是InnoDB磁盘管理的最小单位,默认每个页的大小为16kb,可由"innodb_page_size"设置
-
行
数据是按行进行存放的,每个行最多允许存放16KB/2-200行的记录,即7992行记录。