MYSQL技术内幕-innoDB存储引擎 第四章 表

索引组织表

表根据主键顺序组织存放,这种表称为索引组织表

如果没有显式定义主键,innoDB会按照如下方式选择或创建主键:

1 判断是否有非空的唯一索引,如果有,该列为主键

2 自动创建一个6字节大小的指针

 

 

InnoDB逻辑存储结构

所有数据都被逻辑地存放在一个空间中,称为表空间。表空间由段,区,页(块)组成

1 表空间

innoDB存储引擎逻辑结构的最高层,默认有一个共享表空间,所有数据都放在表空间。通过参数配置,可让每张表的数据放在单独的表空间内

2 段

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

3 区

区是由连续页组成的空间,任何情况下,区的大小都是1M。为了保证区中页的连续性,innoDB一次从磁盘申请4~5个区。

4 页

页是innoDB磁盘管理的最小单位,默认大小为16k,所以一个区有64个连续的页

1.0.x版本引入压缩页,可设置为2k,4k,8k,那每个区对应的页就是512,256,128

1.2.x版本可通过配置将页设置为4k,8k,但是页中数据不压缩。设置之后所有表中页大小都是一样的,而且不可以再次进行修改,除非产生新库

常见页类型:

(1)数据页 B-tree Node

(2)undo页 undo Log Page

(3)系统页 System Page

(4)事务数据页 transaction system page

(5)插入缓冲位图页 insert buffer bitmap

(6)插入缓冲空闲列表页 insert buffer free list

(7)未压缩的二进制大对象页 uncompressed BLOB page

(8)压缩的二进制大对象页 compressed BLOB page

5 行

每个页最多允许存放16k/2~200行的记录,即7992行记录

 

 

 

行记录格式

1 compact

mysql5.0引入的,高效地存储数据,因为一个页中存放的行数据越多,性能越高

2 redundant

mysql5.0之前的存储方式,

3 行溢出数据

一般BLOB,LOB的大对象会把数据存放在数据页面之外,但是BlOB也可以不将数据放在溢出页面,varchar数据类型,也有可能存放为行溢出数据

4 compressed和dynamic

1.0.x引入新的文件格式

5 char的行结构存储

对未能占满长度的填充0x20

在多字节字符集的情况下,char和varchar的实际存储基本没有区别

 

 

 

innoDB数据页结构

数据页由以下部分组成

(1)file header 文件头

  38字节,大小固定,记录页的一些头信息,包括上下页

(2)page header 页头

  56字节,大小固定,记录页的状态信息,

(3)infimun和supremum records

  两个虚拟的行记录,用来限定记录的边界,

  infimun比页中任何主键都小

  supremum records比任何可能大的值都大

(4)user records 用户记录,即行记录

(5)free space 空闲空间

  链表

(6)page directory 页目录

  B+树索引只能找到记录所在的页,然后通过page directory进行二叉查找

(7)file trailer 文件结尾信息

  8字节,大小固定,为了检测页是否完整

 

 

 

named file formats机制

解决不同版本下页结构兼容性的问题

 

 

 

约束

1 数据完整性

5 enum和set约束

 

 

视图

 

 

 

分区表

 

posted @ 2019-07-04 17:15  褐色键盘  阅读(162)  评论(0)    收藏  举报