hash&二叉树&平衡二叉树&B树&B+树

1hash

Hash表,在Java中的HashMap,TreeMap就是Hash表结构,以键值对的 形式存储数据。我们使用hash表存储表数据结构,Key可以存储索引列, Value可以存储行记录或者行磁盘地址。Hash表在等值查询时效率很高,时间 复杂度为O(1);但是不支持范围快速查找,范围查找时只能通过扫描全表的方 式,筛选出符合条件的数据。

显然这种方式,不适合我们经常需要查找和范围查找的数据库索引使用

2二叉树 (基础版)

二叉树:每个节点最多有两个分叉节点,左子 树和右子树数据按顺序左小右大

二叉树的特点就是为了保证每次查找都可以进行折半查找,从而减少IO次数

但是二叉树不是一直保持二叉平衡,因为二叉树很考验根节点的取值,因为很 容易在某个节点下不分叉了,这样的话二叉树就不平衡了,也就没有了所谓的能进行 折半查找了,如下图: 

举例:数据库中数据是不断增多的,假如根节点为10,以后的数据都会在右侧,数据越多,性能越差

3平衡二叉树(升级)

平衡二叉树采用的是二分法思维,平衡二叉查找树除了具备二叉树的特 点,最主要的特征是树的左右两个子树的层级最多差1。

在插入删除数据时通过 左旋/右旋操作保持二叉树的平衡,不会出现左子树很高、右子树很矮的情况。

使用平衡二叉查找树查询的性能接近与二分查找,时间复杂度为 O(log2n),查询id=6,只需要两次IO

就上述平衡二叉树的特点来看,其实是我们理想的状态下,然而其实内部 还是存在一些问题: 时间复杂度和树的高度有关。树有多高就需要检索多少次,每个节点的 读取,都对应一次磁盘的IO操作。树的高度就等于每次查询数据时磁盘 IO操作的次数。磁盘每次寻道的时间为10ms,在数据量大时,查询性 能会很差。(1百万的数据量,log2n约等于20次磁盘IO读写,时间消 耗约等于:20*10=0.2S)。 平衡二叉树不支持范围查询快速查找,范围查询需要从根节点多次遍 历,查询效率不高。

简单的介绍一下红黑树:特点,平衡节点防止退化成链表结构

平衡二叉树有可能退化成链表结构的,所以就有了红黑树,为啥数据库不用红黑树呢? 节点存储元素太少导致树的高度太高查询速度不快

4 B树(升级)

 介绍一下结构:

 data:里面是我们的数据,只要是带data的那个节点都是可以直接获取数据得。例如:15,40,7,12

优势:首先每一个节点处,都是可以存放很多数据和指针的。这就会让我们的数据层级很少,查询更快

单条数据查询很快:例如:查询数据2的索引,2小于15,在指针p1的磁盘下,找到磁盘2.

            一次类推,找到磁盘5,找到数据。

缺点:批量查询数据稳定性不是很好(有可能慢,有可能快),

  例如查询 8-26的数据:查找到8之后,需要回到根节点重新遍历查找, 需要从根节点进行多次遍历,查询效率有待提高

                               

5B+树(升级)

B+树,作为B树的升级版,

B+树和B树最主要的区别:B+树 是只有叶子节点存储数据     B树不是。

优点:

       查询更加稳定,

       节点可以存放指针更多了(只能叶子节点才能存data),这样层级更加少了,io更少了。

举例:查询15-30数据:

     经历就会是4步即可。

 如何应用的呢(InnoDB)?

 例如:SELECT * FROM `test`  WHERE id=15  ,

     它会先判断这个sql走没走索引,走了就会去走索引查询,直接查询到这条数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值