InnoDB中使用的是B+树聚集索引,主键索引叶子节点有整行的数据,辅助索引有主键值(用于回表查询)和索引值。 2.1 页的概念 Mysql的InnoDB是以页为存储单位的,每个B+Tree的节点都是一个页的大小,默认一页的大小是16K(与操作系统数据读取相关)。 数据页(即叶子节点) 2.2 索引高度h与页面I/O数的关系 每次查询都要...
索引树上每个节点除了存储KEY,还需要存储指针。所以每个节点保存的KEY的数量为pagesize/(keysize+pointsize)(如果是B-TREE索引结构,则是pagesize/(keysize+datasize+pointsize))。 假设平均指针大小是4个字节,那么索引树的每个节点可以存储16k/((8+4)*8)≈171。那么:一个拥有3000w数据,且主键是BIGINT类型的表的...
此外,MySQL 中的缓存大小也会影响 B+ 树的高度,因为缓存大小越大,B+ 树中节点的数量就越少,从而使树的高度降低。 另外,在 MySQL 中使用 B+ 树建立索引时,还要考虑索引的唯一性和是否为主键。如果索引是唯一的,则 B+ 树的高度可能会稍微低一些,因为在唯一索引中,每个节点都必须包含不同的值。如果索引是主...
如果B+树高度为2的话,那么这棵B+树的存放总记录数为:根节点指针数*单个叶子节点记录行数 = 16kb/14 * 16 大约 1.8w+ 数据。 如果B+树高度为3的话,那么这棵B+树的存放总记录数为:根节点指针数*单个叶子节点记录行数 = 16kb/14 * 16kb/14 * 16 大约2kw+数据。 因此常见InnoDB存储引擎B+树的高度基...
4.2 B+树的删除操作 一、树 树状图是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 它具有以下的特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点...
所以,上述的数据结构一般仅用于内存对象,基于磁盘的数据排序与存储,最有效的依然是 B+ 树索引。 B+树索引的特点是:基于磁盘的平衡二叉树,但树非常矮,通常为 3~4 层,能存放千万到上亿的排序数据。树矮意味着访问效率高,从千万或上亿数据里查询一条数据,只用 3、4 次 I/O。
树高较低:B+ 树是一种平衡树,所有叶子节点都位于同一层级。其高度通常为 O(logn)O(\log n)O(logn),而且由于每个节点可以存储多个键,B+ 树的高度往往比二叉搜索树低。因此,查询所需的比较次数显著减少。多路查找:每个节点包含多个子节点,这意味着在一次访问中,可以比较多个键值。这种设计减少了从根...
page_level 值是 1,那么 B+树高度为page level + 1 = 2 特别说明: 查询数据库时,不论读一行,还是读多行,都是将这些行所在的整页数据加载,然后在内存中匹配过滤出最终结果。 表的检索速度跟树的深度有直接关系,毕竟一次页加载就是一次IO,而磁盘IO...
B-树,全称是 Balanced Tree,是一种多路平衡查找树。 一个节点包括多个key (数量看业务),具有M阶的B树,每个节点最多有M-1个Key。 节点的key元素个数就是指这个节点能够存储几个数据。 每个节点最多有m个子节点,最少有M/2个子节点,其中M>2。