Mysql底层索引,聚集索引和非聚集索引

MySQL的Innodb存储引擎的索引分为聚集索引和非聚集索引。主键可以是聚集索引也可以是非聚集索引,聚集索引中数据和索引存储在一起,而非聚集索引则存储主键值,需要通过主键在聚集索引中找到数据。非聚集索引虽然查询速度快,但增删操作复杂。非聚集索引仅存储主键,以节省空间。在实际应用中,需要权衡查询速度和存储空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

MySQL的Innodb存储引擎的索引分为聚集索引和非聚集索引两大类

1.主键是一个特殊的唯一性索引,它可以被设置成聚集索引,也可以被设置成非聚集索引.
       一个加了主键的表,他的整个表就变成了一个索引,也就是所谓的聚集索引(聚集索引只能有一个),变成了一个平衡树的结构,而没有加主键的表才是真正的表,它的数据无序的存放在磁盘的存储器上,排列的很整齐.
      所以加了索引的表可以大大的提升查询速度,假如有一亿个数据,加了索引了表(假设是有10个节点的二叉树),只需要查询10次,而没有加所用就需要1亿次.而对于增删操作需要维护平衡树的结构,自然变得麻烦一些.
      如果一个表的主键是id,那么通过id找就是通过索引的.
      sql server 中添加主键的时候,自动给主键所在的字段生成一个聚集索引
2.非聚集索引.
      非聚集索引和聚集索引一样,都是以平衡树为数据结构,也就是我们常说的常规索引,树中的叶子节点数据来自于加了索引的字段.假如给name这个字段加了索引,就会把name字段的所有属性单独复制出来,构建一个小的平衡树.就是非聚集索引.
      在我们查找的时候,就可以通过非聚集索引查到对应的主键值,再使用主键值通过聚集索引找到我们需要的数据,也就是说聚集索引是通往真实数据的唯一路径.

聚集索引和非聚集索引的区别:
      区别就是真实数据和索引是不是在一起,聚集索引存储的是真实数据,数据和索引在一起,而非聚集索引仅仅存储了数据对应的主键.

小tips:
      如果非聚集索引也存储了真实数据,这样通过普通索引查询的时候不是更快嘛?

       这里其实运用了时间换空间的思想,假如我们的数据很多,每加一个普通索引就要复制一份数据,那么就会很占用空间,所以对于非聚集索引,直接存储主键即可,况且这样也不会浪费多少时间.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员bling

义父,感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值