MySQL主键索引和聚簇索引的区别

 

1. 主键索引和聚簇索引的区别

MySQL 主键索引就是聚簇索引吗?答案是否定的。

在 MySQL 数据库 innodb 引擎里面,主键索引的确就是聚簇索引。

但是 myisam 引擎里面主键索引并不是聚簇索引。

对于Innodb,主键毫无疑问是一个聚簇索引。但是当一个表没有主键,或者没有一个索引,Innodb会如何处理呢?

 

2. 聚簇索引生成规则

1. 如果一个主键被定义了,那么这个主键就是作为聚簇索引。

2. 如果没有主键被定义,那么该表的第一个唯一非空索引被作为聚簇索引。

3. 如果没有主键也没有合适的唯一索引,那么innodb内部会生成一个隐藏的主键作为聚簇索引,这个隐藏的主键是一个6个字节的列,改列的值会随着数据的插入自增。

4.自增主键会把数据自动向后插入,避免了插入过程中的聚簇索引排序问题。

聚簇索引的排序,必然会带来大范围的数据的物理移动,这里面带来的磁盘IO性能损耗是非常大的。 而如果聚簇索引上的值可以改动的话,那么也会触发物理磁盘上的移动,于是就可能出现page分裂,表碎片横生。所以不应该修改聚簇索引。

 DML 语句DML(Data Manipulation Language)语句:数据操纵语句。用途:用于添加、修改、删除和查询数据库记录,并检查数据完整性。常用关键字:insert、update、dele ...