所以在 InnoDB 中 B + 树高度一般为 1 - 3 层,它就能满足千万级的数据存储。在查找数据时一次页的查找代表一次 IO,所以通过主键索引查询通常只需要 1 - 3 次 IO 操作即可查找到数据。 五、最后回顾一道面试题 有一道 MySQL 的面试题,为什么 MySQL 的索引要使用 B + 树而不是其它树形结构?比如 B 树?
1、页 在MySQL 中 InnoDB 存储引擎的最小存储单元是页(大小默认是16k,可通过参数设置)。页可用于存放B+树叶节点数据,也可用于存放B+树非叶节点的 “键 + 指针”(也就是路径节点)。 在查找数据时一次页的查找代表一次 IO,一般B+树高大约为1~3层,所以通过主键索引查询通常只需要 1~3 次 IO 操作即可查找...
我们假设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行记录。 我...
b+树一般2到4层,就可以满足千万级的数据存储 2.索引 索引是帮助MySQL高效获取数据的数据结构。数据库索引类似是一本书前面的目录,能加快数据库的查询速度,数据库数据就是书具体的内容。索引一般存在磁盘上 主键索引和非主键索引都是用B+Tree数据结构储存, ...
一颗m阶的B-树,有以下特征:❝根结点至少有两个子女;每个非根节点所包含的关键字个数 j 满足:⌈m/2⌉ - 1 <= j <= m - 1.(⌈⌉表示向上取整)有k个关键字(关键字按递增次序排列)的非叶结点恰好有k+1个孩子。所有的叶子结点都位于同一层。❞ 一棵简单的B-树如下:B+ 树简介 B+树是...
B-树是一种m阶平衡树,叶子节点都在同一层,由于每一个节点存储的数据量比较大,所以整个B-树的层数是非常低的,基本上不超过三层。 由于磁盘的读取也是按block块操作的(内存是按page页面操作的,一般是16k,是内存页面的整数倍,读1块,刚好放到4个内存页面上),因此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个 ...
通常情况下,b加树三层结构足以存储接近2000w的数据量了,所以一般三层就足够了,再多的数据量就得考虑一下分库分表了 赞 评论 分享 收藏 王磊 折中查询效率和数据存储的方案,b+树是平衡树,每个节点上包含多个叶子结点,为了减少对磁盘的io,所以层级越少越好。只有叶子节点存储数据,为了数据存储的量,三层大约可以...