Mysql数据库B-Tree索引

目录

一、为什么要使用索引

二、什么是B+Tree索引

1、二叉树

2、红黑树

3、Hash

4、B-Tree

5、B+Tree

三、索引相关的知识点

 (1)、聚集索引和非聚集索引

(2)、为什么推荐使用主键使用自增ID

(3)、为什么叶子节点非主键索引Data存放的是主键ID

(4)、什么是最左前缀匹配原则

(5)、什么是覆盖索引


一、为什么要使用索引

索引是数据结构,是数据库提高检索数据的常见手段。它是根据索引字段生成排好序数据文件。

二、什么是B+Tree索引

在讲解B+Tree索引之前,我们结合下面数据了解下二叉树、红黑树、B-Tree、Hash数据结构。

AB
133
244
322
455
511

1、二叉树

      规则:元素大的在右边、小的在左边。

         3c37ccbe4b2544bf8ad762facc325c88.jpeg

     缺点:树的高度随着数据量的上升而增高。如果索引字段为自增ID、生成的二叉树类似链表。我们知道链表的的检索速度慢,所以二叉树性能低下。

2、红黑树

    规则:元素大的在右边、小的在左边。

    特点:相比二叉树,红黑树在树达到一定高度时会进行自我平衡,降低树的高度。所以相同的数据量,使用红黑树明显比二叉树性能会更好

828bd6ffce934079822cee40c777aab8.jpeg

   缺点:在百万级的数据中,树的高度依旧很高。检索数据能力欠缺。

3、Hash

对于Hash一般了解下,我们知道hash对索引进行一次计算就能定位到数据,性能很优秀。但是不支持范围查询,所以一般不使用。

4、B-Tree

上面说过红黑树虽然可以自我平衡,但是数据量增加树的高度还会很高。为了解决这个问题,思考是否在分配节点时分配大一点,使一个节点可以存放多个索引元素,相比红黑树一个节点放一个索引元素,变成了每个节点都可以存放多个元素。那么我们可以这么理解,树的高度不高也能存放很多索引元素,这种数据结构称之为B-Tree.

e76bb7414bd74650963b5c9a8d679c24.png

5、B+Tree

B+tree是B-tree的变种,比较类似。但是我们可以发现,非叶子节点的元素都冗余了一份数据在叶子节点种,并且叶子节点用指针连接,提高了区间的访问性能。还有一点和b-tree相比非叶子节点不存储data数据,这样可以存放更多的索引元素。

 efaf53eccffb49d69e5e225a427f5743.png

三、索引相关的知识点

 (1)、聚集索引和非聚集索引

聚集索引(InnoDB):通俗的讲就是索引和数据文件在一起,找到了索引就找到了数据。在InnoDB存储引擎下,B+tree的叶子节点的data数据就存放完整的数据记录。

非聚集索引(MylSAM):就是索引和数据文件不在一起。在MylSAM存储引擎下,B+tree的叶子节点data数据存放的是指向数据文件的地址。

(2)、为什么推荐使用主键使用自增ID

通过B+Tree生成器分析,索引元素是从左到右排好序的,并且节点的存放的索引元素个数是有上限的,如果不使用自增的ID,且节点满了,当插入的元素刚好在满的节点上,试想会不会出现这样的一个现象,这个节点的元素会分裂并且移动到其他节点,从而带动每个节点移动,增加索引的维护成本。通过B+tree生成器可以知道按照自增插入,会一直添加到最左边,这样在很大的程度上可以避免分裂,从而提高性能。

一般推荐使用雪花ID,

(1)、ID是自增的

(2)、Long类型比字符串在比对数据时,速度更快。

(3)、为什么叶子节点非主键索引Data存放的是主键ID

在B+tree中,主键索引的叶子结点存放的是完整的数据记录,而非主键索引存放的是主键的ID。可以保证数据的一致性,存放主键ID相对于存放完整的数据记录,可以节省更多的磁盘空间。

(4)、什么是最左前缀匹配原则

最左前缀原则发生在联合索引中,它要求查询条件必须包含联合索引的第一个索引字段。因为生成B+Tree是按照联合索引字段先后顺序建立索引的。

(5)、什么是覆盖索引

SELECT查询语句中。查询的字段信息,都可以从索引文件中获取到,不要回表查询字段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

邓厂长

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值