博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
028-B+树(一)
阅读量:4883 次
发布时间:2019-06-11

本文共 758 字,大约阅读时间需要 2 分钟。

B+ 树

这部分主要学习

了解了 B 树后再来了解下它的变形版:B+ 树,它比 B 树的查询性能更高。

一棵 B+ 树需要满足以下条件:

  1. 节点的子树数和关键字数相同(B 树是关键字数比子树数少一)
  2. 节点的关键字表示的是子树中的最大数,在子树中同样含有这个数据
  3. 叶子节点包含了全部数据,同时符合左小右大的顺序

简单概括下 B+ 树的三个特点:

  1. 关键字数和子树相同
  2. 非叶子节点仅用作索引,它的关键字和子节点有重复元素
  3. 叶子节点用指针连在一起

首先第一点不用特别介绍了,在 B 树中,节点的关键字用于在查询时确定查询区间,因此关键字数比子树数少一;而在 B+ 树中,节点的关键字代表子树的最大值,因此关键字数等于子树数。

第二点,除叶子节点外的所有节点的关键字,都在它的下一级子树中同样存在,最后所有数据都存储在叶子节点中。

根节点的最大关键字其实就表示整个 B+ 树的最大元素。父节点的每个数据都是其对应子节点的最大值

第三点,叶子节点包含了全部的数据,并且按顺序排列,B+ 树使用一个链表将它们排列起来,这样在查询时效率更快。

由于 B+ 树的中间节点不含有实际数据,只有子树的最大数据和子树指针,因此磁盘页中可以容纳更多节点元素,也就是说同样数据情况下,B+ 树会 B 树更加“矮胖”,因此查询效率更快。

B+ 树的查找必会查到叶子节点,更加稳定。

有时候需要查询某个范围内的数据,由于 B+ 树的叶子节点是一个有序链表,只需在叶子节点上遍历即可,不用像 B 树那样挨个中序遍历比较大小。

B+ 树的三个优点:

  1. 层级更低,IO 次数更少
  2. 每次都需要查询到叶子节点,查询性能稳定
  3. 叶子节点形成有序链表,范围查询方便

 

转载于:https://www.cnblogs.com/igoodful/p/9112586.html

你可能感兴趣的文章
计算100~200之间不能被3整除的数,continue使用范例
查看>>
计算三个数的平均值
查看>>
基于visual c++之windows核心编程代码分析(34)WinIo驱动级模拟按键的实现
查看>>
使用WSAIoctl获取AcceptEx函数指针 [转]
查看>>
【图论补完计划】poj 3613(Floyd 快速幂)
查看>>
JAX-RS -- Java API for RESTful Web Services
查看>>
Android Handler消息传递机制
查看>>
[BZOJ1572] WorkScheduling
查看>>
Struts2学习笔记1--Struts2简介
查看>>
Redis面试总结
查看>>
CSS3 2D转换
查看>>
sed详解
查看>>
tar 命令
查看>>
Linux rpm命令
查看>>
Lock wait timeout exceeded; try restarting transaction linux设置mysql innodb_lock_wait_timeout
查看>>
提取网页正文的开源库的比较
查看>>
C++0x FAQ中文版
查看>>
Hibernate @Temporal的使用
查看>>
字符串函数集
查看>>
基于visual Studio2013解决算法导论之021单向循环链表
查看>>