MYSQL索引


   B-树:  (balance tree)

M阶 的 B树(也叫作 B-树), 即 M叉的多路平衡查找树,  特征:

  1. 定义任意非 叶子 结点 最多只有 M个  儿子; 且 m>2;

  2. 根结点的 儿子数 为 [2,m]

  3. 除 根 结点 以外的 非 叶子结点 的 儿子 数为 [m/2, m] ( m/2 向上取整);

  4. 每个结点存放 至少 m/2 -1 (向上取整)和 至多 M-1 个关键字; (至少2个 关键字)

  5. 非叶子结点 的 关键字个数 = 指向儿子的指针个数 -1 ;

  6. 非叶子结点 的 关键字:  k[1], k[2], .... k[M-1];    且 K[i] < k[i+1]

  7. 非叶子结点的指针:        p[1], p[2]... p[m];其中 p[1]指向 关键字 小于 k[1]的子树, 且 p[m]指向关键字 大于 k[m-1] 的子树,其他  p[i] 指向 关键字 属于(k[i-1], k[i])的子树

  8. 所有叶子结点位于 同一层

  9. B 树的 每个结点里 存放着 key, value 和 指针

B树的 插入,删除 和 平衡等

MySQL索引与锁的机制 三 MYSQL B+树 储存

 

 


 

B+树:  (balance tree) 

● B+树 是 B-树 的变种, 其定义基本与 B-树 相同 除了:

  • 非叶子结点的 子树指针 与 关键字个数相同,
  • 非叶子结点的 子树指针 p[i], 指向关键字 值 [kp[i],  k[i+1]] 的子树, (例如:key=10, 他的子树在 10到20之间)
  • 非叶子结点 仅用来 索引,数据都保存 在 叶子结点中
  • 所有叶子结点 均有一个 链指针 指向下一个叶子结点

 ●  广泛用于各种  文件系统 和  数据库系统  比如

  • Windows   :    HPFS 文件系统

  • Mac           :      HFS,    HFS+  文件系统

  • Linux         :  ResiserFS,  XFS, EXt3fs,  JFS 文件系统

  • 数据库       :  Oracle,  MySql,  SqlServer 等 

MySQL索引与锁的机制 三 MYSQL B+树 储存 

一个模拟 B+ 树的一个网页

 


 

B+树  查找流程: 比如现在要查找 85,从 root 节点开始

 

 

B+树 比 B树的 优点


  •  B+ 树的 中间结点 只保存数据(key-value)中的 关键字(key), 不保存数据( 一条数据 由 key 和其他字段组成),所以磁盘页能容纳 更多的 点元素,更 矮胖
  •  B+ 树  查询必须 查找到 叶子结点, B树 只要匹配到 即可, 不管元素的位置, 因此 B+树 查找更稳定
  •  对于 范围查找, B+树 只需要遍历 叶子结点链表即可, B树却需要 重复的 遍历整颗树

 B+ 树  比 B-树 以及 二叉树 更加节省 磁盘IO

  • 如果 树太大,就不能把整个树 全部都加载到内存中, 只能逐行 加载每一个 磁盘页(树的结点),要减少 IO 次数。即减少输的高度。 而  矮胖  就是 B+树的 特征之一(高度小),每个结点包含 M 个 子节点, m 称为 b树的阶。大小取决于 磁盘页的 大小。

一般情况: B+ 树都不会超过 四层, 一个页 存1000, 4层 1000^4

 

 

相关文章:

  • 2021-04-28
  • 2021-07-17
  • 2021-04-24
  • 2021-12-13
  • 2021-06-03
  • 2022-12-23
  • 2021-08-01
猜你喜欢
  • 2021-12-26
  • 2022-12-23
  • 2021-09-06
  • 2021-12-23
  • 2021-07-15
  • 2021-08-23
相关资源
相似解决方案