一,索引组织表
表都是按照主键组织表,记录是按照主键索引排序
若表没有声明主键索引
首先判断是否有非空唯一索引,人工有,该列为主键
如果不符合条件,存储引擎黑自动创建6字节大小的指针
create table test1(
a int not null,
b int Null,
unique key(a),
unique key(b)
);
insert into test1 select 1,2;
insert into test1 select 11,12;
insert into test1 select -1,-2;
select * from test1;
select _rowid from test1;
insert into test1 select -1,Null;
insert into test1 select -3,Null;
select * from test1;
_rowid只能显示单列主键,对多列主键就不行了
create table test2(
a int,
b int,
primary key(a,b)
);
insert into test2 select 1,2;
select _rowid from test2;
二.innodb逻辑存储空间
innodb所有数据都被逻辑存着放在一个空间中
表空间由段,区,页构成
如果用户启用了参数innodb_file_per_table,则每张表内数据可以单独放到一个表空间
默认情况有一个共享表空间ibdata1
show variables like “innodb_file_per_table”;
段:表空间由数据段,索引段,回滚段构成,段是由区构成
区:区是由页构成,为保证数据连续性,存储引擎会每次申请多个页,在任何情况下每个区大小为1MB,innodb存储引擎页默认大小为16KB,默认情况即一个区由64个页面组成
页:默认每个页面大小为16KB,也可以设置4K,8K等,页面类型可分为数据页,索引页面等
行,行组成页
推荐:https://blog.csdn.net/qq_18312025/article/details/78658171