为什么 Mysql 用 B + 树做索引而不用 B 树或红黑树

  B-树、B+树、红黑树,都是平衡查找树,那么查询效率上讲,平均都是O(logn)

 

为什么是B+ 树不用 B 树

  B + 树只有叶节点存放数据,其余节点用来索引,而 B -树是每个索引节点都会有 数据域。

  B树的内部节点都是存储实际数据的,增大了节点大小,增加了磁盘IO次数(磁盘IO一次读出的数据量大小是固定的,单个数据变大,每次读出的就少,IO次数增多,一次IO多耗时)

  B+树内部节点只作为导向作用,b+树的每个节点的孩子数更多,整个树的高度就更低,大大增加查询效率。

  B+树的叶子节点有链表相连,适合范围查询,相邻页直接读取。

 

为什么 B+树 而不是红黑树

  AVL 树和红黑树基本都是存储在内存中才会使用的数据结构。

  在大规模数据存储的时候,红黑树往往出现由于树的深度过大而造成磁盘 IO 读写过于频繁,进而导致效率低下的情况。

  B+ 树的深度更小,IO较少,效率更高

 

posted @ 2020-10-29 09:17  抽象Java  阅读(664)  评论(0编辑  收藏  举报