mysql 优化 聚簇索引=主键索引吗

在 InnoDB 引擎中,每张表都会有一个特殊的索引"聚簇索引",也被称之为聚集索引,它是用来存储行数据的。一般情况下,聚簇索引等同于主键索引,但这里有一个前提条件,那就是这张表需要有主键,只有有了主键,它才能有主键索引,有主键索引才能等于聚簇索引。

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

聚簇索引诞生过程

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

当你为一张表创建主键时,也就是定义 PRIMARY KEY 时,此时这张表的聚簇索引就是主键索引。通常情况下,我们应该为一张表设置一个主键,如果没有合适的列作为主键列,我们可以定义一个自动递增的唯一列为主键,并且在插入数据时是自动填充此列。

然而,如果一张表中没有设置主键,那么 InnoDB 会使用第一个唯一索引(unique),且此唯一索引设置了非空约束(not null),我们就使用它作为聚簇索引。

如果一张表既没有主键索引,又没有符合条件的唯一索引,那么 InnoDB 会生成一个名为 GEN_CLUST_INDEX 的隐藏聚簇索引,这个隐藏的索引为 6 字节的长整数类型。

总结

在 InnoDB 引擎中,每张表都会有一个特殊的索引"聚簇索引",一般情况下聚簇索引等于主键索引,但聚簇索引又不完全等于主键索引,因为一张表中没有主键索引,那么聚簇索引会使用第一个唯一索引(此列必须为 not null),如果以上情况都不满足,那么 InnoDB 会生成一个隐藏的聚簇索引。

相关推荐
千维百策6662 小时前
SRE 中如何消除琐务:提升工程效率与服务可靠性的实践方法
数据库
卓怡学长2 小时前
w266基于spring boot + vue 圣地延安美食乐享系统
java·数据库·vue.js·spring boot·spring·intellij-idea
名不经传的养虾人3 小时前
从0到1:企业级AI项目迭代日记 Vol.65|最危险的故障不是崩溃,是悄悄换掉了正确答案
数据库·人工智能·ai编程·ai-agent·企业ai
程序员佳佳3 小时前
模型网关灰度不是调百分比:把放量、观测和回滚做成账本
java·数据库·人工智能·redis·gpt·aigc·embedding
绩隐金3 小时前
用AI开了本小说 九折归潮
数据库
heimeiyingwang3 小时前
【架构实战】MySQL索引优化:从慢查询到毫秒响应
数据库·mysql·架构
得闲喝茶3 小时前
跨表数据匹配——VLOOKUP、XLOOKUP
大数据·数据库·笔记·信息可视化·数据分析·excel
snow@li3 小时前
数据库:如何设计最佳索引 / 数据库最佳索引设计指南
数据库
渣渣灰飞4 小时前
MySQL 系统学习 第二阶段 第四章:DCL(Data Control Language)第二节:权限管理与角色(Role)
数据库·学习·mysql
肖永威4 小时前
金仓数据库麒麟环境SQL终端使用入门实践(增删改查篇)
数据库·sql·金仓数据库