MYSQL–基础–4.1–索引–数据结构–二叉查找树、红黑树、B树,Hash表
## 数据结构在线演示地址
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
1、二叉查找树(Binary Search Tree)
二叉查找树,也称二叉搜索树
- 左子树上所有结点的值均小于它的根结点的值
- 右子树上所有结点的值均大于它的根结点的值
1.1、演示
1.1.1、新增数据
21,28,14,32,25,18,11,30,19,15
1.1.2、查找数据(27)
1.1.3、新增有序数据
1,2,3,4,5,6,7,8
1.2、优点
- 相比于其他数据结构的优势在于查找、插入的时间复杂度较低。
- 复杂度:O(log n)。
1.3、缺陷
- 不适合数据自增的场景。
- 因为自增的数据,组成的数据结构就是一个链表,所以mysql没选这个数据结构
2、红黑树
红黑树是二叉搜索树的变种,具有自平衡特性,也称二叉平衡树。
红黑树的每个节点都包含一个额外的属性,表示节点的颜色(红色或黑色),这些颜色确保了在节点的插入和删除操作中树是平衡的。
因此,红黑树遵循以下属性:
- 基本属性:红黑树是一个二叉搜索树
- 节点红/黑规则:树的每个节点要么是红色,要么是黑色
- 根节点规则:根节点的颜色属性始终为黑色
- 叶子节点规则:树的每一片叶子都是黑色的
- 红节点规则:如果父节点的颜色为红色,则子节点始终为黑色。因此,不会有两个连续的红色节点
- 深度规则:从根节点到任何叶节点的每条路径都会经过相同个数的黑色节点
2.1、演示
2.1.1、新增有序数据
1,2,3,4,5,6,7,8
2.2、缺点
- 数据量大的时候,层级会非常深,层级深,查找就耗时
- 因为层级不可控,查找耗时就不可控,所以mysql没选这个数据结构
3、B树(本质是红黑树)
- 叶节点具有相同的深度,叶节点的指针为空
- 所有索引元素不重复
- 节点中的数据索引从左到右递增排列
3.1、和B红黑树区别
红黑树 原先一个节点存储 一个元素,现在改为 一个节点 存储 多个元素,这就是B树。
因为一个节点存储了更多的元素,所以整体的高度会比红黑树来的低。
3.2、演示
3.2.1、新增有序数据
1,2,3,4,5,6,7,8,9
4、Hash表
- 对索引的key进行一次hash计算就可以定位出数据存储的位置
- 很多时候Hash索引要比B+ 树索引更高效
- 仅能满足"="、“IN”,不支持范围查询
- hash冲突问题:链表解决
- 效率比B+树高