#青训营 x 字节后端训练营#
>索引的时候可能会用到二叉搜索树, 但当节点很多的时候, 二叉搜索树的高度会很高. 当节点多到内存放不下的时候, 需要将节点放到硬盘中, 但放到硬盘中每增加一次层高就多一次磁盘寻址, 非常耗时. 因此需要引入多叉树, 减少磁盘索引.
为了快速找到符合条件的数据需要进行索引, 索引在最初会使用线性表.
- 线性表
线性表线性存储, 可以随机访问, 进行等值查找非常快速, 但当存在插入删除的时候, 频繁挪动数据性能非常差劲.
- 哈希表
会存在Hash冲突, 散列不分散, 效率低. 等值查找比较快速, 但范围查找比较缓慢
- 二搜索叉树
插入的时候有序, 但如果从小到大插入, 就会退化到线性排列, 效率很低.
- 平衡二叉树(AVL)
为了避免二叉搜索树线性排列的问题, 对树高进行限制. 但只是把插入的效率弥补到查找上, 当有频繁的增删时, 平衡二叉树就会频繁的做出左旋右旋等操作, 效率较低
- 红黑树
红黑树为了弥补平衡二叉树的缺陷, 将条件放宽一点, 要求最长子树不超过最短子树的二倍即可(减少大量的旋转).
> 1. 根节点是黑色
> 2. 每个红色节点的两个子节点都是黑色.
> 3. 从任一节点到其每个叶子所有的路径包含相同数目的黑色结点.
数据量太大之后, 内存放不下, 就需要放到磁盘. 放到磁盘后, 层高加一, 就需要多一次磁盘IO, 而磁盘IO极为耗时, 所以需要降低树高. 而限制树高的原因在于二叉树, 所以需要引入多叉树.