红黑树,自平衡的二叉查找树
- 每个节点是黑色or红色
- 根节点是黑色
- 每个叶子节点是黑色
- 每个红色节点的两个子节点一定是黑色
- 任意一节点到每个叶子节点的路径都包含数量相同的黑节点
红黑树不适合做MySQL的存储数据结构,树的深度和节点很大,涉及的io操作比较消耗性能
B树
- m叉树,度数越高,越扁
- 在四叉树中,每个节点至多有四个子节点,至多有3个关键字
- 根节点中1记录了有一个关键字,36是主键,data是对应的记录,36左边的空格记录了小于36的指针
- 叶子节点没有地址记录的就放null
- B树适合做索引吗?
- 假设有60000条数据,7阶的B树,每个节点最多存6个数据,所以至少需要10000节点
- 数据量不大的情况下,度设置的大一点,似乎也还行
- innoDB每个节点的存储限制为16KB(os中page一般是4kb/8kb)
- 如果非叶子节点不存data,只存索引,整个节点就能存储很多索引
度数为3的情况下,最多有三个子节点,下图这种情况下可以是四个子节点,所以需要裂变
B+树
只存key值在非叶子节点,叶子节点存数据,叶子节点之间是有序相连的
innoDB每个节点的存储限制为16KB,所以叶子节点假设一条数据1kb,一个叶子节点就能存储16条数据
减少了树的深度,减少了IO次数