文件的存储
针对于mysql的索引,它采用B树来实现(实际上是B+树),关于数据的存储,在磁盘文件中,是采取一块一块的空间对节点进行存储。
正常情况下,采用B树进行存储,那么树的第一层与第二层也会存储数据,因此如果每个块的大小是16k(假设每条数据是1k)的话,那么最多能够存储的数据便是16k16k16k(此时我们忽略key与指针的大小)。如下图所示:
图片来自b站up主:站长数据结构
这样我们最多可以存储4096k的数据,那么如果我们想存储更多的数据,便无法满足要求(在不增加树层数的要求下)。那么我们想存储更多的数据,由此便产生了B+树的构想,前两层节点仅仅存储指针与key,数据到最后一层去存储,这样可以在1,2层存储更多的索引,同样也能够存储更多的数据(在第三层)。
B+树:非叶子结点只存储记录和指针,叶子结点存储数据。
图片来自b站up主:站长数据结构
那么对比来看,之前是4096k数据,此时我们假设key与指针作为一组是10字节的大小,那么一块就可以存储16k/10=1600条,而1600^3就是我们能够存储的数据条数,此时可以存储的数据远远大于B树。