二叉树
如果使用二叉树,在最坏的情况下会退化为链表形态,变成了顺序查找,遍历整个链。
当数据量大的情况下,层数会不受控的增多,导致效率低下。
红黑树
红黑树但是一种特殊的平衡二叉树,他不会出现二叉树中的最坏情节,他会进行平衡。
但是也有一个问题,就是由于他还是属于二叉树,一个父节点只能跟着2个子节点。如果存在几千万数据,那么红黑树会非常的深同样需要大量io操作,这样一句无法快速的查找到我们想要的数据了。
B树
为了解决树的层数过深导致查询效率低下,每个节点空间过小,所以增大节点空间,将每个叶子节点都存放多个索引元素和对应的多个data。
这样就有效的控制了层数,这样矮胖的树结构,减少了io操作,只需要根据非叶子节点索引元素对比找到应该进入的对应叶子节点查找数据。
B+树
B树还有一个问题,由于非叶子节点也存放了data数据,占用了大量的空间。B+树中将非叶子节点中的data数据删除,而是单纯的放置冗余索引和对应的节点地址,这样使得一个非叶子节点可以存放更多的冗余索引,查找时,对当前非叶子节点使用二分折半查找。
并且叶子节点中使用指针相连,提高了区间访问性能,支持范围查找。
每一层都是有序存储的。
B+树的优势
- 单一的非叶子节点可以存储跟多的索引元素+地址,使得IO操作减少。
- 所有查找的都是查找到最底层的叶子节点,性能查找时稳定的。
- 并且叶子节点有有序链表,方便范围查找。
如有错误欢迎指正