首先是InnoDB的物理结构
它是B+树,这里有一点要注意的,数据=索引;
叶子结点存放数据、主键、事务ID、回滚指针的。
二级索引最终都会指向主键索引。
在InnoDB引擎中,创建表没有主键,InnoDB会把not null中unique作为主键,若这样的列也没有,那么InnoDB会生成6个字节的不可见的rowid。
在InnoDB中如果是独立表空间,创建一个表会生成2个文件,一个是.frm文件,一个是.ibd文件。
使用
show variables liks '%per_table%'
进行查看:
如果为ON就是独立的,因为独立的话管理起来方便。
如创建一个表
create database IT1995Test;
use IT1995Test;
create table student(id int, name varchar(50));
在data/数据库/下面会有frm和ibd这个文件。
这里通过
show variables liks '%datadir%'
这条命令可以查看,数据库存储位置
从中可以知道他存储在/data/mysql/目录下,刚刚创建了个表现在来看看
从中可以看到IT1995Test文件夹。进入即可:
从中可以看到创建了student.frm与student.ibd
下面是如何查看表空间
select * from information_schema.INNODB_SYS_TABLES;
可以看到表空间,ID,spaceID。
数据如下:
下面来分析下这个图:
这里段和表是一致的,段是物理上的,表是逻辑上的。段采用InnoDB引擎进行管理。一个段下有多个区组成;
区是分配空间的最小单位。标准是1M,Page如果是16K大小为标准,一个区是64个连续的Page组成。
Page是最小的IO单位。标准为16K