如果B+树高度为2的话,那么这棵B+树的存放总记录数为:根节点指针数*单个叶子节点记录行数 = 16kb/14 * 16 大约 1.8w+ 数据。 如果B+树高度为3的话,那么这棵B+树的存放总记录数为:根节点指针数*单个叶子节点记录行数 = 16kb/14 * 16kb/14 * 16 大约2kw+数据。 因此常见InnoDB存储引擎B+树的高度基...
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类型的表的...
1、分析b+树非叶子节点情况 ,假定一个表用int类型作为主键,占用4个字节,而指针大小在InnoDB源码中设置为6字节,一共10个字节,根节点一页就能存放16K/10 约为1600个指针 满编的B+树一层能存放的指针数据为1600*1600 约为256W条数据,二层大约为4亿数据。 此时B+树高度为4,因为有叶子节点的存在。假定数据表...
也就是根据别的字段创建的索引,此时会有一个新的B+树,而这个B+树key值存放的是这个字段的数值,而且也是按升序排列。 如图所示,当查询时会先找到这个条件值所在的位置,然后拿到数据区里面的id值,然后在根据id值二次回表到聚簇索引查询一行数据 联合索引 ...
2)高度为2和3的B+树 高度为2的B+树:1170 * 16 = 18720,约存2w条数据记录。 高度为3的B+树:1170 * 1170 * 16 = 21902400,约存2千万条数据记录。 所以:InnoDB中B+树的高度一般为1~3层。mysql查找一页时代表一次IO,通过主键索引只需要1~3次IO。
所以,上述的数据结构一般仅用于内存对象,基于磁盘的数据排序与存储,最有效的依然是 B+ 树索引。 B+树索引的特点是:基于磁盘的平衡二叉树,但树非常矮,通常为 3~4 层,能存放千万到上亿的排序数据。树矮意味着访问效率高,从千万或上亿数据里查询一条数据,只用 3、4 次 I/O。
B+树的高度通常是1-3; 在InnoDB的表空间文件中,约定 page number 为3的代表主键索引的根页,而在根页偏移量为64的地方存放了该B+树的page level。如果page level为1,树高为2,page level为2,则树高为3。索引树高度决定查询的IO次数,当然树高度越大则查询需要的IO次数就越多,查询效率相对来说就越低!
page_level 值是 1,那么 B+树高度为page level + 1 = 2 特别说明: 查询数据库时,不论读一行,还是读多行,都是将这些行所在的整页数据加载,然后在内存中匹配过滤出最终结果。 表的检索速度跟树的深度有直接关系,毕竟一次页加载就是一次IO,而磁盘IO...