MYSQL索引钟B-TREE ,B+TREE ,HASH索引之间的区别和应用场景

先前提到过,一个好的索引能够加速mysql的检索速度,但其实索引也有不同的类型,就比如不同的工具在不同的应用场景下也能发挥一个合适的效果
mysql目前的索引主要有B-TREE ,B+TREE ,HASH

1.HASH索引

哈希索引的key,value的格式很适合作为索引,对于每一行数据,存储引擎都会计算出一个hashcode,,哈希索引将所有的hashcode存储在索引中,同时保存每行数据的指针
哈希索引的缺点:
1.哈希索引只包含哈希值和行指针,不存储字段值,因此不能使用索引中的值来读取行,要采用hashcode
2.hash索引适合比较等值查询,对于一些范围查询由于并不是按照索引值顺序存储的,因此也就不适合排序
3.大量hash冲突的话,维护操作的代价会很高

2.B-Tree索引

B树是一种平衡的多路查找树,我们把树中结点最大的子树数目称为B树的阶。通常记为m。
B树的查找操作:
B树的查找其实和二叉排序树非常相似,可以理解为m叉排序树
① 先让待查找关键字key和结点中的关键字比较,如果等于某个关键字,则查找成功。
② 如果和所有的关键字都不相等,则看key处在哪个范围内,然后去对应的指针所指向的子树中查找。
例: 如果Key比第一个关键字K1还小,则去P0指针所指向的子树中查找,如果比最后一个关键字KN还大,则去PN指针所指向的子树中查找。在这里插入图片描述
第一步:和跟节点10比较,不等且比10大,去右边的子树中查找;
第二步: 和右子树中关键字14比较,不等且比14小,故去左子树中查找;
第三步:和左子树中关键字11比较,相等,获取其data,返回。
B树的插入删除等操作不详细介绍,有需要可以看这篇帖子https://www.cnblogs.com/xiaofengshan/p/15443140.html
优点:
B树可以在内部节点同时存储键和值,因此,把频繁访问的数据放在靠近根节点的地方将会大大提高热点数据的查询效率。这种特性使得B树在特定数据重复多次查询的场景中更加高效。

3.B+树索引

B+树是B-树的变体,也是一颗多路搜索树。一棵m阶的B+树主要有这些特点:
每个结点至多有m个子女;
非根节点关键值个数范围:⌈m/2⌉ - 1 <= k <= m-1
相邻叶子节点是通过指针连起来的,并且是关键字大小排序的。
在这里插入图片描述
优点
当需要进行一次全数据遍历的时候,B+树只需要使用O(logN)时间找到最小的一个节点,然后通过链进行O(N)的顺序遍历即可。而B树则需要对树的每一层进行遍历,这会需要更多的内存置换次数,因此也就需要花费更多的时间
B+树和B-树的主要区别如下:
B-树内部节点是保存数据的;而B+树内部节点是不保存数据的,只作索引作用,它的叶子节点才保存数据。
B+树相邻的叶子节点之间是通过链表指针连起来的,B-树却不是。
查找过程中,B-树在找到具体的数值以后就结束,而B+树则需要通过索引找到叶子结点中的数据才结束
B-树中任何一个关键字出现且只出现在一个结点中,而B+树可以出现多次。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

会说话的皮卡丘

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

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

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

打赏作者

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

抵扣说明:

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

余额充值