B树与B+树

355 阅读1分钟

文件的存储

  针对于mysql的索引,它采用B树来实现(实际上是B+树),关于数据的存储,在磁盘文件中,是采取一块一块的空间对节点进行存储。
  正常情况下,采用B树进行存储,那么树的第一层与第二层也会存储数据,因此如果每个块的大小是16k(假设每条数据是1k)的话,那么最多能够存储的数据便是16k×\times16k×\times16k(此时我们忽略key与指针的大小)。如下图所示:

image.png

图片来自b站up主:站长数据结构

  这样我们最多可以存储4096k的数据,那么如果我们想存储更多的数据,便无法满足要求(在不增加树层数的要求下)。那么我们想存储更多的数据,由此便产生了B+树的构想,前两层节点仅仅存储指针与key,数据到最后一层去存储,这样可以在1,2层存储更多的索引,同样也能够存储更多的数据(在第三层)。

B+树:非叶子结点只存储记录和指针,叶子结点存储数据。

image.png

图片来自b站up主:站长数据结构

那么对比来看,之前是4096k数据,此时我们假设key与指针作为一组是10字节的大小,那么一块就可以存储16k/10=1600条,而1600^3就是我们能够存储的数据条数,此时可以存储的数据远远大于B树。