Mysql索引的数据结构,各自优劣

介绍:

索引的数据结构 具体存储引擎 的实现有关,在MySQL中使⽤较多的索引有 Hash 索引, B+树 索引等
InnoDB 存储引擎的默认索引实现为: B+树索引 。对于哈希索引来说,底层的数据结构就是 哈希表 ,因此在绝⼤多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余⼤部分场景,建议选择BTree索引。

B+树:

B+树是⼀个平衡的多叉树,从根节点到每个叶⼦节点的 ⾼度差值不超过1 ,⽽且同层级的节点间
有指针相互链接。在B+树上的常规检索,从根节点到叶⼦节点的搜索效率基本相当,不会出现⼤幅波动,⽽且基于索引的顺序扫描时,也可以利⽤ 双向指针 快速左右移动,效率⾮常⾼。因此,B+树索引被⼴泛应⽤于数据库、⽂件系统等场景。

哈希索引:

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

区别:

如果是 等值查询 ,那么哈希索引明显有绝对优势,因为只需要经过⼀次算法即可找到相应的键值;前提是键值都是唯⼀的。如果键值不是唯⼀的,就需要先找到该键所在位置,然后再根据 链表 往后扫描,直到找到相应的数据;

如果是范围查询检索,这时候哈希索引就毫⽆⽤武之地了,因为原先是有序的键值,经过哈希算法后,有可能变成不连续的了,就没办法再利⽤索引完成范围查询检索;


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


哈希索引也不⽀持多列联合索引的最左匹配规则


B+树索引的关键字检索效率⽐较平均,不像B树那样波动幅度⼤,在有⼤量重复键值情况下,哈希索引的效率也是极低的,因为存在哈希碰撞问题

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

图图是个好孩纸~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值