索引为什么采用B+树,而不用B-树,红黑树

提升查询速度,首先要减少磁盘I/O次数,也就是要降低树的高度。

  • 平衡二叉树、红黑树,都属于二叉树。

    时间复杂度为O(n),当表的数据量上千万时,树的深度很深,mysql读取时消耗大量 IO。

    另外,InnoDB引擎采用为单位读取,每个节点一页,

    但是二叉树每个节点储存一个关键词,导致空间浪费。

  • B-树,非叶子节点存储数据,占用较多空间,

    导致每个节点的指针少很多,无形增加了树的深度。

  • B+树数据都存储在叶子节点,非叶子节点只存储健值+指针

    索引树更加扁平,三层深度可以支持千万级表存储。

    同时叶子节点之间通过链表关联,范围查找更快。