您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
innodb的结构与表空间
发布时间:2018-05-14 11:06:42编辑:雪饮阅读()
innodb的表空间
innodb表空间控制变量 innodb_file_per_table,其值为on表示每个表是独立的表空间,否则就表示共享表空间.
若表空间是独立的,则此时在一个数据库中创建了表后,进入到你所use的数据库的文件目录中就会看到属于你建立的那个表的ibd表空间文件
在information_schema数据库中INNODB_SYS_TABLES表中存储表与表空间的关系,其中space字段就是表空间id,space为0,则表示是系统表的表空间的id .
innodb的物理存储结构
innodb是聚簇索引表,即数据和索引在一起都在叶子上.
关于索引,一般有主键索引和普通索引(又叫二级索引)之分.
下图中,左边为主键索引,右边为普通索引
无论什么索引,都是b+树结构,最上到最下依次是根、枝叶、叶子
在主键索引中的叶子上存储主键值和主键值所对应的行的数据,事务id、回滚指针。
二级索引上面所有节点都关联主键值。
如果一个表在创建的时候没有主键,则会找表中具有唯一性约束且不允许为空的字段作为第一索引。
如果唯一性约束且不许为空的字段也不存在,则innodb引擎会自动生成一个rowid做为第一索引。
这种没有显式声明主键索引的,而是通过系统来建立主键索引的,那么建立后的主键索引对用户来说是不可见的。
innodb的逻辑存储结构
如下图是innodb引擎的逻辑存储结构
tablespace:表空间
表空间中存储有不同类型的segment(段),有叶子段、非叶子段、事务段
上面物理存储结构中,根和枝叶都属于非叶子段,而叶子就是叶子段。
这个段和表是差不多概念的。
段和表的区别:段是物理上存储数据的,表是一个定义。
segment:段
段是有extent(区)组成的,一个段可以有多个区
extent:区
区是分配空间的最小单位,就像字节与位一样,虽然位是最小单位,但是字节是最小分配空间的单位。区是由64(标准16kb的page时)个连续的page(块)组成的。
1个区的大小标准为1M。
要求一个区中page的个数,用1M除以page的大小即可。
比如,在当前数据库对应的文件目录中的某个表的ibd文件大小除以innodb_page_size 变量的值即可获得区中page的个数。
mysql中的除法应用如:select 6/2;
page:块
块的大小不均匀(可调整),标准的是16K,块是最小的io单位。
page是由row(行)组成的。
row:行
行放在物理结构的叶子上。
行由事务id、回滚指针、数据索引组成。
关键字词:innodb,结构,表空间