MySQL-InnoDB表

2018-10-26  本文已影响18人  agile4j

作者:刘仁鹏
参考资料:《MySQL技术内幕 InnoDB存储引擎》


1.索引组织表

  1. 判断表中是否有非空的唯一索引,如果有,则该列即为主键。如果有多个,选用第一个被声明的主键。
  2. 如果不符合上述条件,InnoDB会自动创建一个6字节大小的指针作为主键。

2.InnoDB逻辑存储结构

1.表空间

2.段

3.区

4.页

  1. 数据页
  2. undo页
  3. 系统页
  4. 事务数据页
  5. 插入缓冲位图页
  6. 插入缓冲空闲列表页
  7. 未压缩的二进制大对象页
  8. 压缩的二进制大对象页

5.行

3.InnoDB行记录格式

1.Compact行记录格式

  1. 第一部分是一个非NULL变长字段长度列表,且其是按列的顺序逆序放置的。
  2. 第二部分是NULL标志位,该位指示了改行数据中是否有NULL值。
  3. 第三部分是记录头信息,固定占用5字节(40位),每位含义如下:


    Compact记录头信息.png-196.5kBCompact记录头信息.png-196.5kB
  4. 最后的部分是实际存储每个列的数据。
  1. NULL除了占有NULL标志位,实际存储不占任何空间。
  2. 每行数据除了用户定义的列之外,还有两个隐藏列事务ID列回滚指针列。分别为6字节和7字节的大小。若InnoDB表没有定义主键,每行还会增加一个6字节的rowid列
  3. 固定长度CHAR字段在未能完全占用其长度空间时,会用0x20来进行填充。
  4. 记录头信息的最后两个字节代表next_recorder,代表下一条记录的偏移量,所以InnoDB在页内部是通过一种链表的结构来串连各个行记录的。

2.Redundant行记录格式

  1. 对于NULL值的处理,Redundant和Compact非常不同:对于VARCHAR类型的NULL值,Redundant同样不占用任何空间,但CHAR类型的NULL值需要占用最大值字节数大小的空间。

3.行溢出数据

4.Compressed和Dynamic行记录格式

5.CHAR的行存储结构

4.InnoDB数据页结构

1.File Header:文件头

2.Page Header:页头

3.Infimum和Supremum Record

4.User Record和Free Space

5.Page Directory:页目录

6.File Trailer:文件结尾信息


end

上一篇 下一篇

猜你喜欢

热点阅读