面试突击57:聚簇索引=主键索引吗?
在 InnoDB 引擎中,每张表都会有一个特殊的索引“聚簇索引”,也被称之为聚集索引,它是用来存储行数据的。一般情况下,聚簇索引等同于主键索引,但这里有一个前提条件,那就是这张表需要有主键,只有有了主键,它才能有主键索引,有主键索引才能等于聚簇索引。
所以看到这里,我们应该明白一个道理:聚簇索引并不完全等于主键索引,因为一张表从结构上来讲,可以没有主键(索引),如果没有主键(索引),那么聚簇索引就不再是主键索引了。
那 InnoDB 中的聚簇索引到底是啥?
聚簇索引诞生过程
在 InnoDB 引擎下,聚簇索引的诞生过程如下:
-
当你为一张表创建主键时,也就是定义 PRIMARY KEY 时,此时这张表的聚簇索引就是主键索引。通常情况下,我们应该为一张表设置一个主键,如果没有合适的列作为主键列,我们可以定义一个自动递增的唯一列为主键,并且在插入数据时是自动填充此列。
-
然而,如果一张表中没有设置主键,那么 InnoDB 会使用第一个唯一索引(unique),且此唯一索引设置了非空约束(not null),我们就使用它作为聚簇索引。
-
如果一张表既没有主键索引,又没有符合条件的唯一索引,那么 InnoDB 会生成一个名为 GEN_CLUST_INDEX 的隐藏聚簇索引,这个隐藏的索引为 6 字节的长整数类型。
总结
在 InnoDB 引擎中,每张表都会有一个特殊的索引“聚簇索引”,一般情况下聚簇索引等于主键索引,但聚簇索引又不完全等于主键索引,因为一张表中没有主键索引,那么聚簇索引会使用第一个唯一索引(此列必须为 not null),如果以上情况都不满足,那么 InnoDB 会生成一个隐藏的聚簇索引。
参考 & 鸣谢
dev.mysql.com/doc/refman/5.7/en/innodb-index-types.html
是非审之于己,毁誉听之于人,得失安之于数。
公众号:Java面试真题解析
相关文章
- 直接在代码里面对list集合进行分页
- .NET Framework 4.5新特性详解
- 大数据的简要介绍
- 大数据的由来
- 高斯混合模型的自然梯度变量推理
- timing-wheel 仿Kafka实现的时间轮算法
- 使用Navicat软件连接自建数据库(Linux系统)
- 那一天,我被Redis主从架构支配的恐惧
- Redis 深入了解键的过期时间
- C#使用委托调用实现用户端等待闪屏
- 基于流计算 Oceanus 和 Elasticsearch Service 构建百亿级实时监控系统
- GRAND | 转录调控网络预测数据库
- JFreeChart API中文文档
- 临床相关突变查询数据库
- TIGER | 人类胰岛基因变化查询数据库
- 视频边缘计算网关EasyNVR在视频整体监控解决方案中的应用分析
- Apache Arrow - 大数据在数据湖后的下一个风向标
- 常见的电商数据指标体系
- AKShare-艺人数据-艺人流量价值
- MySQL中多表联合查询与子查询的这些区别,你可能不知道!