在上一部分了解到,主键索引的本质其实就是一棵B+树,通过每一层的目录页来找到记录所在的page页。根据 page页是否保存了数据,我们可以将主键索引分为 聚簇索引 和 非聚簇索引。
1、MyISAM
(1) 非聚簇索引
非聚簇索引的目录和数据记录是分开存储的。B+树的叶子结点不会存储任何记录,保存的是数据记录的地址。非聚簇索引最大的特点是,将目录Page和数据Page分离。MyISAM引擎采用的就是非聚簇索引。
(2) MyISAM 非聚簇索引验证
我们新创建一个数据表为mytest,使用的存储引擎是MyISAM
create table mytest(
id int primary key,
name varchar(11) not null
)engine=MyISAM; --使用engine=MyISAM
我们先在 /var/lib/mysql 目录下找到建表所在数据库,在该数据库下可以看到 mytest 表的相关文件,我们会发现表的主键索引数据(B+树)和 数据记录 是分开存储的。
2、InnoDB(聚簇索引)
(1) 聚簇索引
聚簇索引的索引目录和数据记录是保存在一起,B+树的叶子结点保存的是数据记录,其他非叶子结点保存的是索引目录。存储引擎InnoDB 采用的就是聚簇索引。
(2) InnoDB 聚簇索引验证
我们创建一个 student 表,使用的存储引擎为 InnoDB
create table student(
id int primary key,
name varchar(11) not null
)engine=InnoDB; --使用engine=InnoDB
同样先在 /var/lib/mysql 目录下找到建表所在数据库,在该数据库下可以看到 student 表的相关文件