乐趣区

关于mysql:面试突击57聚簇索引主键索引吗

在 InnoDB 引擎中,每张表都会有一个非凡的索引“聚簇索引”,也被称之为汇集索引,它是用来存储行数据的。 个别状况下,聚簇索引等同于主键索引,但这里有一个前提条件,那就是这张表须要有主键 ,只有有了主键,它能力有主键索引,有主键索引能力等于聚簇索引。

所以看到这里,咱们应该明确一个情理: 聚簇索引并不齐全等于主键索引,因为一张表从构造上来讲,能够没有主键(索引),如果没有主键(索引),那么聚簇索引就不再是主键索引了。
那 InnoDB 中的聚簇索引到底是啥?

聚簇索引诞生过程

在 InnoDB 引擎下,聚簇索引的诞生过程如下:

  1. 当你为一张表创立主键时,也就是定义 PRIMARY KEY 时,此时这张表的聚簇索引就是主键索引。通常状况下,咱们应该为一张表设置一个主键,如果没有适合的列作为主键列,咱们能够定义一个主动递增的惟一列为主键,并且在插入数据时是主动填充此列。
  2. 然而,如果一张表中没有设置主键,那么 InnoDB 会应用第一个惟一索引(unique),且此惟一索引设置了非空束缚(not null),咱们就应用它作为聚簇索引。
  3. 如果一张表既没有主键索引,又没有符合条件的惟一索引,那么 InnoDB 会生成一个名为 GEN_CLUST_INDEX 的暗藏聚簇索引,这个暗藏的索引为 6 字节的长整数类型。

总结

在 InnoDB 引擎中,每张表都会有一个非凡的索引“聚簇索引”, 个别状况下聚簇索引等于主键索引,但聚簇索引又不齐全等于主键索引,因为一张表中没有主键索引,那么聚簇索引会应用第一个惟一索引(此列必须为 not null),如果以上状况都不满足,那么 InnoDB 会生成一个暗藏的聚簇索引。

参考 & 鸣谢

dev.mysql.com/doc/refman/5.7/en/innodb-index-types.html

是非审之于己,毁誉听之于人,得失安之于数。

公众号:Java 面试真题解析

面试合集:https://gitee.com/mydb/interview

退出移动版