所以在 InnoDB 中 B + 树高度一般为 1 - 3 层,它就能满足千万级的数据存储。在查找数据时一次页的查找代表一次 IO,所以通过主键索引查询通常只需要 1 - 3 次 IO 操作即可查找到数据。 五、最后回顾一道面试题 有一道 MySQL 的面试题,为什么 MySQL 的索引要使用 B + 树而不是其它树形结构?比如 B 树?
我们假设B+树一个节点可以有100个关键字,那么3层的B树可以容纳大概1000000多个关键字(100+101100+101101*100)。而红黑树要存储这么多至少要20层。所以使用B树相对于红黑树和AVL可以减少IO操作
OK,分析完高度为 2 的 B+ 树,同样的道理,我们来看高度为 3 的: 根页(page10)可以存放 1170 个指针,然后第二层的每个页(page:11,12,13)也都分别可以存放1170个指针。这样一共可以存放1170 * 1170个指针,即对应的有1170 * 1170个非叶子节点,所以一共可以存放1170 * 1170 * 16 = 21902400行记录。 我...
1、页 在MySQL 中 InnoDB 存储引擎的最小存储单元是页(大小默认是16k,可通过参数设置)。页可用于存放B+树叶节点数据,也可用于存放B+树非叶节点的 “键 + 指针”(也就是路径节点)。 在查找数据时一次页的查找代表一次 IO,一般B+树高大约为1~3层,所以通过主键索引查询通常只需要 1~3 次 IO 操作即可查找...
b+树一般2到4层,就可以满足千万级的数据存储 2.索引 索引是帮助MySQL高效获取数据的数据结构。数据库索引类似是一本书前面的目录,能加快数据库的查询速度,数据库数据就是书具体的内容。索引一般存在磁盘上 主键索引和非主键索引都是用B+Tree数据结构储存, ...
一颗m阶的B-树,有以下特征:❝根结点至少有两个子女;每个非根节点所包含的关键字个数 j 满足:⌈m/2⌉ - 1 <= j <= m - 1.(⌈⌉表示向上取整)有k个关键字(关键字按递增次序排列)的非叶结点恰好有k+1个孩子。所有的叶子结点都位于同一层。❞ 一棵简单的B-树如下:B+ 树简介 B+树是...
所有叶子结点位于同一层; 下图是一个M=4的4阶的B树: B树的搜索:从根结点开始,对结点内的关键字(有序)序列进行二分查找,如果命中则结束,否则进入查询关键字所属范围的儿子结点;重复,直到所对应的儿子指针为空,或已经是叶子结点; B树的特性: 关键字集合分布在整颗树中; ...
b+树层数计算公式 B+树的层数计算公式可以通过以下几个步骤来推导: 1. 假设B+树的度为d,即每个节点最多包含d个子节点。 2. 根节点是树的第一层,因此层数至少为1。 3. 从根节点开始,每一层的节点数目逐层递减。在B+树中,除了叶子节点外,其他节点的子节点数目和关键字数目相同。 4. 假设树的高度为h,...
B+树的记录索引全部在叶子上,分支结点只有下层的索引,并且每个结点最多可以有n个关键字,因此如果是2层,则第1层1个根,第2层可以有n个结点,于是最多可存放的记录索引数量为n * n= n的平方 再来看B-树 B-树所有的结点都有记录的索引关键字,但是最多只能存放n-1个,下层的索引可以是n个 ...
高度为3的B+树可以存放的行数 =1170 * 1170 * 16 = 21902400 千万级的数据存储只需要约3层B+树,查询数据时,每加载一页(page)代表一次IO。所以说,根据主键id索引查询约3次IO便可以找到目标结果。 对于一些复杂的查询,可能需要走二级索引,那么通过二级索引查找记录最多需要花费多少次IO呢?