红黑树和B树和B+树

首先B树和B+树的区别:

https://blog.csdn.net/zhuanzhe117/article/details/78039692

https://my.oschina.net/u/4116286/blog/3107389

B树的定义:

  1. 根节点的关键字数量范围:1 <= k <= m-1,非根节点的关键字数量范围:m/2 <= k <= m-1
  2. 每个节点中的关键字都按照从小到大的顺序排列,每个关键字的左子树中的所有关键字都小于它,而右子树中的所有关键字都大于它。
  3. 所有叶子节点都位于同一层。
  4. 每个节点都有对应的key和value。

另外,我们需要注意一个概念,描述一颗B树时需要指定它的阶数,阶数表示了一个节点最多有多少个孩子节点,一般用字母m表示阶数。

我们再举个例子来说明一下上面的概念,比如这里有一个5阶的B树,根节点数量范围:1 <= k <= 4,非根节点数量范围:2 <= k <= 4。

B+树的定义:

B+树其实和B树是非常相似的,我们首先看看相同点

  • 根节点的关键字数量范围:1 <= k <= m-1,非根节点的关键字数量范围:m/2 <= k <= m-1。----

不同点

  1. B+树的内部节点只存储索引,叶子节点只存储数据。
  2. 内部节点和叶子节点中的key都按照从小到大的顺序排列。对于内部结点中的一个key,左树中的所有key都小于它,右子树中的key都大于等于它。
  3. 每个叶子结点都存有相邻叶子结点的指针。
  4. 父节点存有右孩子的第一个元素的索引。

 数据库系统实现索引的首选数据结构为什么是B+树而不是B树呢?

答:因为B+树的内节点不存储data,这样一个节点就可以存储更多的key。

优点一: B+树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域。

优点二: B+树所有的Data域在叶子节点,并且所有叶子节点之间都有一个链指针。 这样遍历叶子节点就能获得全部数据,这样就能进行区间访问啦。在数据库中基于范围的查询是非常频繁的,而B树不支持这样的遍历操作。

 数据库系统实现索引的首选数据结构为什么是B+树而不是红黑树呢?

答:https://blog.csdn.net/buyulian/article/details/77996253

AVL树和红黑树基本都是存储在内存中才会使用的数据结构。在大规模数据数据存储的时候,红黑树往往出现由于树的深度过大而造成磁盘IO读写过于频繁,进而导致效率底下的情况

AVL 树和红黑树这些二叉树结构的数据结构可以达到最高的查询效率这是毋庸置疑的。

既然如此,那么数据库索引为什么不用 AVL 树或者红黑树呢?

这就牵扯到一个问题了,不考虑每种数据结构的前提条件而选择数据结构都是在耍流氓。

AVL 数和红黑树基本都是存储在内存中才会使用的数据结构,那磁盘中会有什么不同呢?

这就要牵扯到索引的存储原理了

页是 InnoDB存储引擎管理数据库的最小磁盘单位。

一个页中包括很多数据行。

那么,现在问题就来了

一个父节点只有 2 个子节点,并不能填满一个页上的所有内容啊?那多余的内容岂不是要浪费了?我们怎么才能把浪费的这部分内容利用起来呢?哈哈,答案就是 B+ 树,让一个父节点有多个子节点就可以了。

由于 B+ 树分支比二叉树更多,所以相同数量的内容,B+ 树的深度更浅,深度代表什么?代表磁盘 io 次数啊!

所以,涉及到磁盘上查询的数据结构,一般都用 B+ 树啦。

MyISAM和InnoDB的区别是什么?

  1. MyISAM不支持事务,InnoDB支持事务
  2. MyISAM支持表级锁,InnoDB支持行级锁
  3. MyISAM支持全文搜索,InnoDB不支持全文搜索
  4. MyISAM相对简单,效率上要优于InnoDB,小型应用可以考虑使用MyISAM
  5. MyISAM表保存成文件形式,跨平台使用更加方便
  6. 如果在应用中执行大量select操作可选择MyISAM;如果在应用中执行大量insert和update操作可选择InnoDB

 

什么是红黑树?

https://blog.csdn.net/qq_36610462/article/details/83277524

为什么会有红黑树?

答:BST(二分查找树)存在的主要问题是,数在插入的时候会导致树倾斜,不同的插入顺序会导致树的高度不一样,而树的高度直接的影响了树的查找效率。理想的高度是logN,最坏的情况是所有的节点都在一条斜线上,这样的树的高度为N。

红黑树的定义(红黑树本身就是二叉查找树)?

1.节点是红色或黑色。

2.根节点是黑色。

3.每个叶子节点都是黑色的空节点(NIL节点)。

4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)

5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

HashMap中链表和红黑树怎么转换的?为什么?

当链表中节点数量大于等于8时,链表会转成红黑树。

当链表中节点数量小于等于6时,红黑树会转成链表。

红黑树和AVL(平衡二叉树,作者的名字是G. M. Adelson-Velsky和E. M. Landis)树的区别是什么?

小知识:BST叫二分搜索树

小知识:MySQL有三种锁的级别:页级、表级、行级。

在数据库的锁机制中,可以按照锁的粒度把数据库锁分为行级锁(InnoDB 引擎)、表级锁(MyISAM 引擎)和页级锁(BDB 引擎)。

行级锁
行级锁是 MySQL 中锁定粒度最细的一种锁表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突,其加锁粒度最小,但加锁的开销也最大。行级锁分为共享锁和排他锁。

特点

开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

表级锁
表级锁是 MySQL 中锁定粒度最大的一种锁表示对当前操作的整张表加锁,它实现简单,资源消耗较少,被大部分 MySQL 引擎支持。最常使用的 MyISAM 与 InnoDB 都支持表级锁定。表级锁定分为表共享读锁(共享锁)与表独占写锁(排他锁)。

特点

开销小,加锁快;不会出现死锁;锁定粒度大,发出锁冲突的概率最高,并发度最低。

页级锁
页级锁是 MySQL 中锁定粒度介于行级锁和表级锁中间的一种锁。表级锁速度快,但冲突多,行级冲突少,但速度慢。因此,采取了折衷的页级锁,一次锁定相邻的一组记录。BDB 支持页级锁。

特点

开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

小知识:MyISAM 发音为 "my-z[ei]m";InnoDB 发音为 "in-no-db"

小知识:

树节点的度数即为该节点孩子的个数。

这是一棵树,树的度指其中节点的度最大值。

比如1号节点的孩子是2、3、4,则1号节点的度数是3,且1号节点的度是最大的,故该树的度为3。

猜你喜欢

转载自blog.csdn.net/qq1922631820/article/details/115066037