数据库 -> Mysql索引的数据结构,各⾃优劣

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

  • InnoDB存储引擎的默认索引实现为:B+树索引

  • 对于哈希索引来说,底层的数据结构就是哈希表,因此在绝⼤多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余⼤部分场景,建议选择BTree索引。

B+树:

  • B+树是⼀个平衡的多叉树,一个节点可以有多个数据内容,这样就不会出现二叉树那样数据庞大的时候,树的高度比较高的情况,查询的次数就会少
  • B+树叶子节点间有指针相互链接,并且会维护了索引的顺序的,所以有顺序、有相邻的引用,这样在执行范围查找的时候,就可以左右移动,范围查找的效率就会高很多
  • 所以数据庞大的时候,B+树被⼴泛使用,数据库、⽂件系统等场景。

哈希索引:

  • 哈希索引就是采⽤⼀定的哈希算法,把键值换算成新的哈希值

  • 检索时不需要类似B+树那样从根节点到叶⼦节点逐级查找,只需⼀次哈希算法即可⽴刻定位到相应的位置,速度⾮常快

  • 如果是等值查询,那么哈希索引明显有绝对优势,因为只需要经过⼀次算法即可找到相应的键值;

  • 前提是键值都是唯⼀的。如果键值不是唯⼀的,就需要先找到该键所在位置,然后再根据链表往后扫描,直 到找到相应的数据;

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

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

  • 在有⼤量重复键值情况下,哈希索引的效率也是极低的,因为存在哈希碰撞问题。

红黑树:

  • 红黑树也可以查询很快,都是红黑树在数据很多的情况下,树的高度是很高的
  • 所以也不用来做索引了

普通二叉树

  • 这就更加不行了,高度不说了,它还不会平衡
  • 如果123456这样按照顺序添加,1永远是跟节点,依次增加就之后在树的右边加
  • 就变成了
  • 1
    • 2
    • 3
      • 4
        • 5
  • 这样更不行了

所以基本上就都是用B+树的

  • 哈希索引也还保留着可以选择使用,但是数据的格式一定要特殊
  • 它不能范围查询,就很尴尬,基本也用不着
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值