1. 二叉树
二叉树(Binary Tree)是每个节点最多有两个子节点的树结构,通常子节点被称为“左子节点”和“右子节点”。
二叉树的特点:
每个节点最多有两个子节点。
每个节点一定大于左子节点,且一定小于右子节点
即使树中的某个节点只有一个子节点,也要区分是左子节点还是右子节点。
缺点:
- 顺序插入时,会退化形成一个链表,查询性能大大降低。
- 大数据量情况下,层级较深,检索速度慢。
2. 红黑树
红黑树(Red-Black Tree)是一种自平衡的二叉树,它在每个节点上增加了一个颜色的属性,可以是红色或黑色,通过颜色和一些调整规则来确保树的平衡性,从而在动态插入和删除操作中保持相对平衡的状态。相比二叉树,节点间会进行自动的平衡,不会退化成链表。
红黑树的特点:
- 每个节点要么是红色,要么是黑色。
- 根节点是黑色。
- 所有叶子节点(NIL或空节点)是黑色。
- 如果一个节点是红色,则它的两个子节点都是黑色(即不能有两个相邻的红色节点)。
- 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
缺点:
- 本质还是二叉树,大数据量情况下,层级较深,检索速度慢。
3. hash
哈希索引就是采用一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储到hash表中。
如果两个(或多个)键值,映射到一个相同的槽位上,他们就产生了hash冲突(也称为hash碰撞),可以通过链表来解决。
InnoDB中具有自适应hash功能,hash索引是InnoDB存储引擎根据B+Tree索引在指定条件下自动构建的。
特点
- Hash索引只能用于精确查找(=,in),不支持范围查询(between,>,< 等)。
- 无法利用索引完成排序操作。
- 查询效率高,通常(不存在hash冲突的情况)只需要一次检索就可以了,效率通常要高于B+tree索引。
4. B树
B树(B-tree)是一种自平衡的树,相比于二叉树可以拥有更多的子节点。所有节点关键字是按递增次序排列,并遵循左小右大原则。
以一颗最大度数(max-degree)为5的B树为例,每个节点下最多有4个key,5个指针和5个子节点。
特点
- 一旦节点存储的key数量到达最大度数,就会裂变,中间元素向上分裂。
- 在B树中,非叶子节点和叶子节点都会存放数据。
5. B+树
B+树(B+tree) 是 B树的变种,相对于B树,它有以下特点:
- 所有的数据都会出现在叶子节点。
- 叶子节点使用指针相连,形成一个单向链表,便于进行范围查询和顺序访问。
- 非叶子节点仅仅起到索引数据作用,具体的数据都是在叶子节点存放的。
MySQL对 B+树进行了优化,在原有基础上,增加一个指向相邻叶子节点的链表指针,形成了带有顺序指针的
B+Tree(双向链表),提高区间访问的性能,利于排序。