聚集索引和非聚集索引的区别底层_别说你不懂数据库,索引get起来!

数据库索引如同字典的目录,加速查询效率。索引分为聚集和非聚集,前者在叶子节点存储实际数据,后者存储主键。虽然索引能提升查询速度,但会降低增删改操作的效率,因为需要维护索引结构。聚集索引一张表只能有一个,而非聚集索引可有多个。
摘要由CSDN通过智能技术生成

数据库中的索引最通俗易懂的解释大概就是“目录”?想象一下几千页的牛津字典没有的目录,你的第一想法是什么?抓头发?nonono恐怕再抓下去会头发就真的所剩无几了。Woc,怎么会有这么大的bug?如果你是第二种,恭喜你,妥妥的程序猿(程序媛)一枚!

dc4f8737fcbdf39f47e4ddf29df18514.png

一张表如果没有建立索引就如同字典没有灵魂目录一般,由此可以看出索引的重要性。此次就数据库的索引小编将对其进行深入剖析,力求通过这篇文章将索引言简意赅、深入浅出、360度无死角的展现在广大读者的面前。

在攻下这个堡垒之前,我们先来大体上了解一下索引:

索引相当于一张表的附加表,存储着表中建立索引的字段值以及对应记录值的地址,在进行查询时,首先要做的就是在索引表中进行查询,根据查询的条件找到相关记录的地址,再根据记录地址在表中存取对应的记录;索引分为聚集索引与非聚集索引;经常进行insert,delete,updata操作就不要建立索引,因为索引会明显降低插入、删除、更新等维护任务的速度。

1a571a1184c93d0a880c3e60f557e70b.png

看到这是不是像苏大强一样头又痛有晕呢?没关系,下面小编带你一一解决这些问题。

Poser1:索引是怎么来提高查询速度的?

Poser2:为什么会降低增删改的速度?

Poser3:聚集索引和非聚集索引有什么本质区别?

首先来解决第一个难题,当你对某一字段加上索引之后,查询就会先去索引表中一次定位到特殊值的行数,大大减少遍历匹配的行数,所以能够明显增加查询的速度。通过页目录可以在O(logN)的时间内快速定位到数据具体的页上,如果没有用索引的话,就需要遍历整个双向链表以及单向链表来找到具体的数据。

MySQL底层是B+树的结构,B+树是平衡树的一种,它的非子叶点它的非叶子节点只具有导航的作用,数据全部存储在叶子节点上,并且叶子节点之间是相链的,因此遍历一棵B+数只需要在线性时间内遍历叶子节点即可。为了更好的保持B+树的结构性,在每次进行INSERT、UPDATE和DELETE后都需要维护树结构,这些维护工作也将导致额外的开销,导致索引降低了增删改的速度。

f082d7e122dde89c366992e9b4bed6da.png

有没有发出像发出土拨鼠一样的尖叫,对的,就是这样,尽情释放你的脑洞,一个原理性的难题就这样被你轻松解决掉。

最后介绍一下聚集索引与非聚集索引,聚集索引本质为按照每张表的主键构造一棵B+树,非聚集索引以非主键创建的索引。聚集索引在叶子节点存储的是表中的数据,并且聚集索引在逻辑上是连续的,而非聚集索引在叶子节点存储的是主键和索引列。当使用非聚集索引查询时,拿到叶子上的主键再去查找想要的数据。

课代表划重点:聚集索引在一张表中只能有一个,而非聚集索引可以有多个。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值