一.首先介绍原理之前,要明白几个概念

二叉搜索平衡树:就是保证任意节点度的绝对值为1或者0,同时父节点大于左子树,小于右子树

红黑树:是一种特殊的二叉搜索平衡树,通过“变色,左旋,右旋” 达到二叉搜索平衡树的状态

具体的细节可以看我往期的博客

二.接下来介绍b-tree

M阶的 Btree的几个重要特性:
1.结点最多含有m颗子树(指针),m-1个关键字(数据)(m>=2),比如4阶的话,就4个指针,3个数据
2.除根结点和叶子结点外,其它每个结点至少有ceil(m/2)个子节点子树,ceil为上取整5/2=2.5取整分裂
ceil取上整数2.5=>3;2.1=>3
3.若根节点不是叶子节点,则至少有两颗子树
BTee有一个非常重要的操作,当一颗树不满足以上性质的时候会干嘛?红黑树大家已经知
道了会左旋右旋变颜色。分裂( B-Tree)

 

接下来举个例子

MySQL性能优化底层原理b-tree,b+tree树详解

MySQL性能优化底层原理b-tree,b+tree树详解

MySQL性能优化底层原理b-tree,b+tree树详解

 你会左子树叶子节点发现,1,3<4    4< 5,6 < 7     8,11,12>7  

三.B+树

性质跟b树差不多,只不过每个节点都要保存最大(最小)的值.

有三点注意:

1.叶子节点连起来了

2.非叶子节点不保存数据

3.数据和节点一样多

MySQL性能优化底层原理b-tree,b+tree树详解

MySQL性能优化底层原理b-tree,b+tree树详解

这里有个注意点,看看MySQL用什么引擎

MySQL性能优化底层原理b-tree,b+tree树详解

MyIsam引擎把索引放在MYI文件中,数据行放在MYD文件中。 MYI文件和MYD文件存在你们安装数据库的地方

MySQL性能优化底层原理b-tree,b+tree树详解

聚合索引:索引跟数据行放在一个文件中

必须有主键的原因:mysql索引维护必须用唯一id主键

使用整型自增的原因:用字符型的话,还要转成ASCII码,维护索引的b+树结构,增加开销。不自增的话数据可能插在其他地方,又要重新调整b+树结构,增加开销。自增的话直接在后面添加数据,前面的索引b+树结构不用调整。

 

 

mysql索引查询遵循最左匹配原则。所以

MySQL性能优化底层原理b-tree,b+tree树详解

四.总结 

二叉查找树:二叉搜索树,优点查找快,但是在某些情况下会退化成链表,它是所有
高效查找树的基础,如果不懂这个其他的也学不懂。根本性的东西,最好能自己手写出来


红黑树:内存查找高效树,不适合大数据量也不适合磁盘存储的。具体的分析就是I0浪费以及读取资源浪费,还有
就是树的深度会很大。适合一些底层系统做内存运算


B-Tree:可以认为是B+ree过度。只需要知道 BTreel就可以


B+Tree:最适合大数据的磁盘索引,经典的MSq1,所有的数据都存在叶子节点。其他都是索引,增加了系统的稳定
性以及遍历以及查找效率


不同:关键字和Key值。数据存储的地方,双向链表
M阶:这个由磁盘的页面大小决定,磁盘快和页内存都是16KB。我们的节点数也就是我们的M值应该要尽可能的跟他
样。这样的好处就是为了我们一次刚好能全部拿出一个节点里面存的所有的数据

 

相关文章:

  • 2021-12-20
  • 2021-09-12
  • 2021-07-05
  • 2021-08-24
  • 2021-12-20
  • 2021-11-24
  • 2021-10-16
  • 2021-11-28
猜你喜欢
  • 2021-11-16
  • 2021-12-13
  • 2021-07-03
  • 2021-06-18
  • 2021-08-11
  • 2021-08-03
  • 2022-12-23
相关资源
相似解决方案