面试题:B树与B+树的区别,为什么Innodb要用B+树而不是B树
B树
B树是一种平衡的多路查找树,它的所有叶子节点都在同一层。
B树是由平衡二叉树演化而来,B树的每个节点可以存储多个关键字,每个节点都带有完整的数据。
B树将节点大小设为磁盘页的大小,每次读取磁盘页时就能读取到一整个节点,减少了磁盘IO次数。由于B树的每个节点都存储着多个关键字,树的深度会远小于一般的平衡二叉树,进而减少了磁盘IO次数。B树在进行搜索关键字操作时,先将指定的那一个节点从磁盘读取到内存中(这个节点包含了多个关键字和数据),再在内存中查找这一个节点里的对应关键字。
B+树
B+树在B树的基础之上做了改进,B树只在叶子节点上存放数据,其他节点只有索引作用(只存储索引键值)。
由于在数据库中页的大小是固定的,InnoDB存储引擎中页的大小默认为16KB,如果非叶子节点不存数据,那么这些非叶子节点就可以存储更多的索引键值。在同等数据量下,B+树会比B树更矮、更胖。B+树在B树的基础上进一步压缩了树的高度,减少了磁盘IO次数,提高了索引查找效率。