B+树索引与Hash索引

既然索引的数据结构有B+树与Hash两种,那么索引又是什么呢?

索引

在关系型数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的 SQL 语句执行得更快。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

使用索引可以快速地查找到数据,但是不同的数据结构,查找数据花费的时间与使用的场景也不尽相同。在MySQL中,索引的结构主要分为B+树与Hash这两种。

B+Tree

B+树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,而且同层级的节点间有指针相互链接。

在B+树上的常规检索,从根节点到叶子节点的搜索效率基本相当,不会出现大幅波动,而且基于索引的顺序扫描时,也可以利用双向指针快速左右移动,效率非常高。

B+树的每一层中,只存放key,不保存数据信息,因此就可以将本来存放数据的空间来存放更多的key。

B+树的结构图:

3

Hash

哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B+树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可立刻定位到相应的位置,速度非常快。

示意图:

在这里插入图片描述

区别

1、因为Hash索引是一个key对应一个桶位,经过一次hash运算就可以得到位置。 如果是等值查询,那么哈希索引明显有绝对优势,;当然了,这个前提是,键值都是唯一的。如果键值不是唯一的,就需要先找到该键所在位置,然后再根据链表或者红黑树往后扫描,直到找到相应的数据。而B+树呢?它查找数据则是需要一层一层地寻找、比较,所以在等值查询的时候,Hash是要比B+树速度快的。

2、如果是范围查询检索,这个时候哈希索引就没有什么作用了,因为原先是有序的键值,经过哈希算法后,有可能变成不连续的了,而且如果存在hash值相同的情况,还会放在桶位后面的链表或者红黑树,所以是没有没办法利用索引完成范围查询检索。而B+树在叶子节点是有顺序的进行排列,并且通过指针也能方便地查找到下一个叶子节点。所以在范围查询方面,B+树是非常合适的。

3、哈希索引也没办法利用索引完成排序,以及like ‘xxx%’ 这样的部分模糊查询(这种部分模糊查询,其实本质上也是范围查询)。

4、哈希索引也不支持多列联合索引的最左匹配规则。

5、 B+树索引的关键字检索效率比较平均,在有大量重复键值情况下,因为存在所谓的哈希碰撞问题,哈希索引的效率也是极低的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值