mysql基础知识点一

mysql基础知识点一

mysql索引底层数据结构与算法

1. 常见的索引结构
红黑树,hash,b-,b+
2. 红黑树做索引的优缺点
1. 特殊的平衡二叉树,根节点黑色,叶子节点红色,每个叶子到根的节点不会出现俩个连续的红色节点,从任意一个节点到每个叶子节点的路径包含的相同的黑色节点
2. 近似平衡二叉树,排序问题是一个性能消耗点
3. 由于只有俩路,所以树高会很高,这点不好,太多的内存交互
4. 任何情况都不会退化成链表:红黑树叶子结点的定义是nil结点,nil结点没有数据,每个数据结点的子结点如果少于两个都用nil填满,也就是上图1-4都有另一个nil子结点,n有两个nil子结点,规则5说的到所有叶子的距离,不是到最靠下的数据结点的距离,而是到所有nil结点的距离。如下图,注意没画出来的俩个nil子节点

img

3. hash做索引的优缺点
1. 根据key找value,性能极高
2. 仅支持 =  in但不支持范围查询
3. hash冲突问题
4. 具体结构如下图

1641978708506

4 b-tree
1. 多路搜索树,树高就会降低
2. 数据和索引存在一起,所以索引分布在整棵树中,节点中数据从左到右递增,其性能等于在关键字集合中做一次二分查找,(二叉树适合有序数组查找)
3. 支持热点访问,在特定重复查询场景更高效,可以再内部节点存储键值和相关记录数据,让其更靠近树根

img

5 b+tree
1. 多路搜索树,索引和数据分开存,也就是说一次磁盘io可以放更多的索引
2. 非叶子节点存放索引,叶子节点存放数据,叶子节点之间有指针,提高区间访问能力,可以理解成范围查询的实现

img

6 索引的基本类型
1. 聚集索引,又叫聚簇索引,主键索引
2. 非聚集索引,又叫二级索引,
3. 覆盖索引,利用二级索引查询完不需要回表既覆盖索引,或者说所查询字段都在查询的索引树上
4. 联合索引,一个索引包含多个字段,使用遵循最左前缀。至于为何遵守最左前缀看他的索引结构。
最左前缀使用时按顺序用索引字段,其他的遵守普通索引失效规则
5. 普通索引
6. 唯一索引
7 为何推荐自增主键
1. 避免页分裂,如果使用业务主键,且当前页写满了,那么就要申请新的数据页,并将上个数据页的部分数据移动到新的数据页上。
posted @   小傻孩丶儿  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
历史上的今天:
2021-01-12 Error:java: Compilation failed: internal java compiler error
2021-01-12 java: -source 1.5 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符)
2020-01-12 Lc196-删除重复的电子邮箱
2020-01-12 Lc185-部门工资前三高的所有员工
2020-01-12 Lc18-四数之和
2020-01-12 Lc17-电话号码的字母组合
点击右上角即可分享
微信分享提示