B+Tree
B+树是B树的变种,在B树上做了一些优化:
1.非叶子节点不存储data只存储索引,为的是能存储更多的索引(page_size只有16kb)
2.叶子节点用指针连接,提高区间访问的性能,如我查找id在18-30之间的数据通过叶子节点的指针就能很快查找出对应的数据了。
B+树结构图如下:
mysql默认节点的大小是16Kb,如下:
用BigInt(占用8个字节)做索引的情况下,16KB大概可以放1170个索引元素,按树高为3层算(1170117016(一行数据一般最大也就1Kb))就可以放两千万条记录。
由上面可以看出mysql在做几千万的级别数据查询,在索引排好序的情况下也就做3次磁盘IO就能查找到了,效率还是非常高的。