数据库
首页 > 数据库> > Mysql聚簇索引和非聚簇索引的区别

Mysql聚簇索引和非聚簇索引的区别

作者:互联网

先说一下Mysql常见的两种引擎,一种是Myisam,另一种是Innodb。

Myisam的数据存储有三种后缀类型的文件,.MYD,.MYI,.frm,而.MYI就是Myisam存储的索引文件,.MYD是数据存储文件,所以说Myisam数据和索引是分开的。

对于Myisam而言,叶子比较轻,而Innodb叶子比较重,因为Innodb存储数据了。

再往进一步说,因为Myisam引擎下有多个索引,每个索引对应不同的索引文件;但Innodb引擎,比如ID是索引,这个字段存了数据,那么假如再在Innodb引擎表下创建一个索引,是不是也会同时再存储一遍当前行数据?这就不能是数据了,那么二级索引下存储的就不是当前行数据了,而是主键ID。所以总结一下,Myisam中主索引和次级索引都指向物理行,而Innodb主键索引直接存储当前行数据,次级索引下存储的是主键,再通过主键拿数据信息。

补充:对于Innodb而言

假如没有主键索引,则会以唯一索引作为主键;

如果没有唯一索引,则系统内部生成一个rawid做主键;

 

Innodb主键的索引结构中,既存储了主键值,又存储了数据,称之为聚簇索引。

 

 

聚簇索引的优缺点

优势: 根据主键查询条目比较少时,不用回行(数据就在主键节点下)

劣势: 如果碰到不规则数据插入时,造成频繁的页分裂.

 

聚簇索引的主键值,应尽量是连续增长的值,而不是要是随机值, (不要用随机字符串或UUID) 否则会造成大量的页分裂与页移动.

 

高性能索引策略

对于innodb而言,因为节点下有数据文件,因此节点的分裂将会比较慢. 对于innodb的主键,尽量用整型,而且是递增的整型. 如果是无规律的数据,将会产生的页的分裂,影响速度.

标签:非聚,聚簇,存储,索引,Innodb,Myisam,数据,主键
来源: https://blog.51cto.com/u_15230485/2821392