为底数很大的 log n,底数大小与节点的子节点数目有关,一般一棵B-树的高度在 3 层左右。
平衡二叉树的平衡条件是:左右子树的高度差不大于 1;而 B 树的平衡条件则有三点: 叶子节点都在同一层 每个节点的关键字数为子树个数减一(子树个数 k 介于树的阶 M 和M的二分之一之间) 子树的关键字保证左小右大的顺序 也就是说,一棵 3 阶的 B 树(即节点最多有三个子树),每个节点的关键字数最少为...
所以在 InnoDB 中 B + 树高度一般为 1 - 3 层,它就能满足千万级的数据存储。在查找数据时一次页的查找代表一次 IO,所以通过主键索引查询通常只需要 1 - 3 次 IO 操作即可查找到数据。 五、最后回顾一道面试题 有一道 MySQL 的面试题,为什么 MySQL 的索引要使用 B + 树而不是其它树形结构?比如 B 树?
满二叉树:一颗高度为h,并且含有2^h-1个节点的二叉树称为满二叉树,即树的每一层都含有最多的节点。 完全二叉树:设一个高度为h,有n个节点的二叉树,当且仅当其每一个节点都与高度为h的满二叉树中编号为1~n的节点一一对应时,称为完全二叉树。 structTreeNode{intval; TreeNode* left;// left childTreeNo...
我们假设B+树一个节点可以有100个关键字,那么3层的B树可以容纳大概1000000多个关键字(100+101100+101101*100)。而红黑树要存储这么多至少要20层。所以使用B树相对于红黑树和AVL可以减少IO操作 大纲 在了解 B树、B+树、AVL树、红黑树 之前,我们先看一下各种树型结构的大致实际应用场景: ...
不一定是3层啊,可以扩展到多层,道理是一样的。检索的时候沿着根开始找,直到找到对应的叶子节点,就是要找的数据了。
B-树,全称是 Balanced Tree,是一种多路平衡查找树。 一个节点包括多个key (数量看业务),具有M阶的B树,每个节点最多有M-1个Key。 节点的key元素个数就是指这个节点能够存储几个数据。 每个节点最多有m个子节点,最少有M/2个子节点,其中M>2。
B+树是多叉平衡搜索树,扇出高,只需要3层左右就能存放2kw左右的数据,同样情况下跳表则需要24层左右,假设层高对应磁盘IO,那么B+树的读性能会比跳表要好,因此mysql选了B+树做索引。 redis的读写全在内存里进行操作,不涉及磁盘IO,同时跳表实现简单,相比B+树、...
两种B树其实其实用得最多就是在磁盘IO上了,可以将每个节点看成一个磁盘块,然后就可以根据范围找到对应的磁盘进行刷盘,减少磁盘检索的次数.常见的MySQL底层就是使用B+树结构,之所以不用B-树,是因为B-树每个节点都存放数据,这样子如果要索引叶子节点的数据,得将该叶子节点前面所有节点都能走一遍,在这个走一遍的过程...