树的概念
树的演变
二叉搜索树
二叉搜索树可以提高查询效率,左小右大,但是他不好掌握根节点的数字是哪个,容易一边倒,导致层数变多,降低效率
平衡二叉搜索树
平衡二叉搜索树在二叉搜索树的基础上,通过控制任意一个节点的左子树和右子树的高度差距不超过1,如果超过就要旋转的原则,来减少树的高度,树达到一个平衡,
由于,旋转条件太过极端,随着元素越来越多,每次旋转需要重新排序的情况越来越复杂,越消耗就会越大.
红黑树
红黑树在平衡二叉搜索树基础之上,进行自平衡,自己来根据添加的数据来选定根节点是哪个,可以降低层数,提高查询效率.
但是红黑树一个节点只能存一个数
红黑树的基本思想
(在保证效率的基础上,减少旋转带来的性能消耗.)牺牲一小部分查询效率,换取一大部分的旋转性能提升,
红黑树的特性约束
性质1. 结点是红色或黑色。
性质2. 根结点是黑色。
性质3. 所有叶子都是黑色。(叶子是NIL结点)
性质4. 每个红色结点的两个子结点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色结点)
性质5. 从任一节结点其每个叶子的所有路径都包含相同数目的黑色结点。
这些约束强制了红黑树的关键性质: 从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。
b树
b树,一个节点可以搞多个树,又减少了层数
b+树
b+ 树,在b树的基础上进行再次优化,最多三层,前两层存的是索引,第三层叶子节点才是具体数据,查询效率最高
mysql的索引机制使用的是B+树
mysql索引就是用的b+树,对数据进行重排序,提高查询效率,但是不利于更新数据,
而且占用空间,因为一旦数据更新,b+树也要跟着重排
索引的缺点
1.,就是会生成一个占用一部分磁盘空间.
2.数据库的数据更改,索引的更新,会消耗性能
3.索引可能会失效
()没办法进行条件查询就会索引失效,(模糊查询,或者不等于 都会导致条件查询失败,因为根据这些条件没办法去查找具体的子节点的数据范围,来摒弃一部分数据,就失去了建立索引的意义,)