2、明确这颗B+树一定是由主键索引构建的B+树,所以最终的数据是存储在叶子结点,非叶子节点,只存储主键索引,所以主键索引的大小决定了最终能存放多少数据。 答案: 主键为bigint(约2000w): 2层B+树的话:可以存放1170个*16条=18720条(行)数据。 3层B+树的话:可以存放1170个*1170个*16条=21902400条(行)数据。
由存储结构,可以大概计算出一个B+树能存储的数据数量。 指针在InnoDB中为6字节,设主键的类型是bigint,占8字节。一组就是14字节。 计算出一个非叶子结点可以存储16 * 1024 / 14 = 1170个索引指针。 假设一条数据的大小是1KB,那么一个叶子结点可以存储16条数据。 得出两层B+树可以存储1170 x 16 = 18720 ...
1、InnoDB 存储引擎的最小存储单元是页,页可以用于存放数据也可以用于存放键值 + 指针,在 B+ 树中叶子节点存放数据,非叶子节点存放键值 + 指针。 2、索引组织表通过非叶子节点的二分查找法以及指针确定数据在哪个页中,进而在去数据页中查找到需要的数据; 三、那么回到我们开始的问题,通常一棵 B+ 树可以存放多...
先说结论:一般B+树高大约为1~3层(通过主键索引查询,通常磁盘io数为1~3次),可容纳记录数约2000w条 编辑 在MySQL 中我们的 InnoDB 页的大小默认是16k,当然也可以通过参数设置。 在查找数据时一次页的查找代表一次 IO,所以通过主键索引查询通常只需要1~3次 IO 操作即可查找到数据。 1、MySQL的InnoDB存储引擎的...
B+树是一种在非叶子节点存放排序好的索引而在叶子节点存放数据的数据结构,值得注意的是,在叶子节点中,存储的并非只是一行表数据,而是以页为单位存储,一个页可以包含多行表记录。非叶子节点存放的是索引键值和页指针。 那么,在MySql数据库里,一个页的大小是多少呢?
图MySQL B+树示意图 InnoDB页的大小默认是16KB: 假设一条记录大小为1KB,则一个数据页中可以存16条数据(忽略页中的其他数据结构) 假设主键为int,又指针大小为6B,则一个索引页中可以存储16KB/(4B+6B)≈1638个索引 所以,两层的B+树可以存储:16*1638=26208条数据;三层的B+树可以存储:16*1638*1638=42928704条...
innodb的所有数据文件(后缀为ibd的文件),他的大小始终都是16384(16k)的整数倍。 InnoDb存储结构 InnoDB中主键索引B+树是如何组织数据、查询数据的,我们总结一下: 1、InnoDB存储引擎的最小存储单元是页,页可以用于存放数据也可以用于存放键值+指针,在B+树中叶子节点存放数据,非叶子节点存放键值+指针。
根据同样的原理我们可以算出一个高度为 3 的 B + 树可以存放:1170*1170*16 = 21902400 条这样的记录。 所以在 InnoDB 中 B + 树高度一般为 1 - 3 层,它就能满足千万级的数据存储。在查找数据时一次页的查找代表一次 IO,所以通过主键索引查询通常只需要 1 - 3 次 IO 操作即可查找到数据。
如上图,三层树包含两层非叶节点(包含根节点)和一层叶几点。先计算非页节点:非叶节点不保存数据,只保存主键值和指向子节点的指针。指针在InnoDB中为6字节,假数据库主键的类型是bigint,占8字节。那么一个非叶节点能保存的数据量为16 * 1024 / 14 = 1170(个)主键和指针对。第二层的存储的数量就是1170...
根据同样的原理我们可以算出一个高度为3的B+树可以存放:1170*1170*16=21902400条这样的记录。所以在InnoDB中B+树高度一般为1-3层,它就能满足千万级的数据存储。在查找数据时一次页的查找代表一次IO,所以通过主键索引查询通常只需要1-3次IO操作即可查找到数据。