为什么InnoDB使用B+树而不是B树

  • 出于对IO性能的考虑
  • B树每个节点都存储数据,而B+树只有叶子节点才存储数据,所以在查询相同数据量的情况下,B树的IO会更频繁。因为索引本身存储在磁盘上,当数据量大时,就不能把整个索引全部加载到内存,只能逐一加载每一个磁盘页。更何况B树的索引中还保存了数据信息,导致B树的一个磁盘页保存的索引数量也比较少。即加载索引阶段还加载了许多用不到的数据。
  • 遍历效率更高:由于B+树的数据存储在叶子节点上,分支节点均为索引,方便扫库,只需要扫描一遍叶子即可,而且叶子节点形成链表,范围查询也比较方便。但B树在分支节点都保存着数据,要找到具体的顺序数据,就需要执行一次中序遍历来查询。
  • 因为B树不管叶子节点还非叶子节点,都会保存数据,这样导致了非叶子节点中能保存的指针数量就变少,指针少的情况下还要保存大量数据,就只能增加树的高度,导致IO操作变多,查询性能变低

你可能感兴趣的:(MySQL,b树,数据结构)