MySQL中InnoDB引擎底层存储

主键的生成策略

优先使用用户自定义主键作为主键。如果用户没有定义主键,则选取一个Unique键作为主键。如果表中连Unique键都没有定义的话,则InnoDB会为表默认添加一个名为row_id的隐藏列作为主键。

行格式

InnoDB存储引擎设计了4种不同类型的行格式,分别是Compact、Redundant、Dynamic和Compressed行格式。

COMPACT行格式

变长字段:比如VARCHAR(M)、VARBINARY(M)、各种TEXT类型,各种BLOB类型....他的储存长度是不固定的,我们在存储的时候也要把这个字段实际多长记录起来null值列表:每个允许存储NULL的列对应一个二进制位,二进制位的值为1时,代表该列的值为NULL。记录头信息:由固定的5个字节组成。5个字节也就是40个二进制位,不同的位代表不同的意思。

DB_ROW_ID(row_id):非必须,6字节,表示行ID,唯一标识一条记录(没有自定义主键以及Unique键的情况下才会添加该列)DB_TRX_ID:必须,6字节,表示事务IDDB_ROLL_PTR:必须,7字节,表示回滚指针

Redundant行格式

Redundant行格式是MySQL5.0之前用的一种行格式,这里不做详细介绍。

Dynamic和Compressed行格式

MySQL5.7的默认行格式就是DynamicDynamic和Compressed行格式和Compact行格式挺像,只不过在处理行溢出数据时有所不同。Compressed行格式和Dynamic不同的一点是,Compressed行格式会采用压缩算法对页面进行压缩,以节省空间。

索引页格式

InnoDB管理存储空间的基本单位,一个页的大小一般是16KB。




转载请注明:http://www.aierlanlan.com/tzrz/8392.html