1.I/O次数更少
B+树的层数比其他树(二叉搜索树等)小,那么I/O的次数就会少,因为读取一个节点后,再判断去哪个节点继续读取(一次I/0操作),说明层数越高,那么读取I/O的次数也就越多。
对于B+树来说,中间节点是存的索引没有存数据,因此同样大小的磁盘页可以容纳更多的节点元素。比B+树也更加“矮胖”,因此查询I/O次数更少。
2.查询更加稳定
每次查询都必须查询到叶子节点,而B-树(中间节点也带有数据,中间节点+叶子节点才是全部数据)只要找到了匹配元素即可,无论是中间节点还是叶子节点,因此B-树的查询性能并不稳定(最好的情况直接是根,最坏的情况在叶子节点)
3.更利于查询范围
叶子节点首尾相互连接的,只需要在链表上做遍历。
B+(中间节点只存地址,不存数据,叶子节点全存数据):
B-(中间节点也带数据,所以中间节点存的节点少,因此每个节点能够容纳的空间是固定的,InnoDB从磁盘取到内存,一个节点4KB(实则是一个页表)):