MySQL中B+树实现原理

一、索引用途

       索引的目的在于提高查询效率,比如去图书馆借书,如果你要借某一本书,一定是先找到对应的分类科目,再找到对应的编号,最终找到这本书。索引就是帮我们加快查询速度,快速定位。

        Mysql中B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的。在讲B+树之前必须先了解二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-Tree)。

二、B+树索引演变过程

        ①哈希表

优点:哈希表查询特定的值的时候,特别快,例如查a = 3。
缺点:

  • 哈希表冲突会造成数据散列不均匀,会产生大量的线程查询,比较浪费时间。
  • 不支持范围查询,当进行范围查询的时候,必须要全部遍历,例如查a > 3。
  • 对于内存空间的要求比较高,读入内存需要将整个哈希表读进内存。

那么在mysql中有没有hash索引?

  • Memory存储引挚使用的是hash索引。
  • Innodb支持自适应hash索引(Innodb存储引擎自己决定是用hash索引存还是B+树存)。

 ②二叉搜索树

特性:插入数据的时候必须有序,左子树必须小于根结点,右子树必须大于根结点,使用二分查找来提高查找效率。

        二叉查找树的查询时间复杂度比链表快,链表的查询时间复杂度是O(n),二叉排序树平均是O(logn)。二叉查找树越平衡,越能模拟二分法,所以与二分的思想相似,二叉查找树查询的时间复杂度O(logn)。

        如果插入的结点的值的顺序,是越来越小或者越来越大的,那么BST就会退化为一条链表,那么其查询的时间复杂度就会降为O(n)。如下图所示:

③ 平衡二叉树

性质:通过左旋和右旋让树变平衡,最短子树和最长子树高度只差不超过1,为了保证平衡,在插入数据的时候必须要旋转,旋转消耗性能,插入时性能下降,而查询性能提升。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值