3-6 一个sql语句是怎么执行的
mysql 执行启动器
3-7、mysql有哪些存储引擎
1、myisam
- mysql5.5.5 之前默认的存储引擎
- 插入数据块 b+树 功能少
- 空间利用率高 没有事务,不会产生log,导致占用空间少,利用率真tm高
- 不支持事务
2、innoDB
- Mysql5.5.5之后的默认存储引擎
- 支持事务、外键
- 支持崩溃修复能力和并发控制
3、memory
- 所有的数据都在内存中,速度快 cpu》内存》硬盘
- 数据安全性差 内存特点:断电数据就扑街了
4、 archive
- 数据压缩、空间利用率高
- 插入速度快
- 不支持索引,查询性能差
4-1、索引组织表
- innodb数据表均为索引组织表
- 索引组织表是由索引组织起来的表
- innoDb中,表都是根据主键顺序组织存放的
4-2 b加树
1、主流索引查找算法
-
线性查找 Linear search
1、时间复杂度O(n) 直接和数据长度相关,随时间长度的增加而增加
2、从第一个数据开始,逐个匹配
缺点,效率差
-
二分查找 binary search
1、时间复杂度 O(log(N))
2、取中间的值进行判断,相对线性查找而言,每一次查找都排除了一般的可能,不会随着数据的增加而增加,而是呈现log指数型增长 (这里的log是以2 为底的,例如,当数据量增大256倍时,消耗的时间只增大了8倍
缺点: 很多时候数据都不是连续的,局域性 很大! 例如硬盘随机读取,硬盘碎片等等
-
二叉查找树
1、树结构 时间复杂度O(logN)
2、使用经典的 二叉树数据结构
3、从根节点开始查找
4、 由于经典的二叉树结构——大于根节点 的在右边,小的再左边,导致可能无限小无限大,最后退化成链表,不能体现出二叉树的优势(相对于二分法,根节点就是中点,不会出现二分法找不到中点的问题)
- 平衡二叉树 AVL树
时间复杂度 O(logN)
1、 查找时,与二叉树相同
2、增删改时, 通过旋转操作,维护树的平衡
3、AVL树保证了不会退化成线性查找
缺点 : 单节点能存储的数据量太少,被数据库弃用
eg:
转为 :
-
b树
由来:AVL树单节点只能存一个,太短小了,老B搞了个新的树,单节点多塞数据
1、b树是线性数据结构和树的结合
2、b树通过多数据节点大大降低了树的高度,高效利用磁盘
3、b树不需要旋转就可以保证树的平衡
缺点:每次都先从根节点遍历循环查找数据,特别是对范围查询 ,需要非常多的磁盘io
-
b+ (线性和 b的结合)
1、b+树是由b树发展来电一种数据结构
2、b+树的所有数据均在叶子节点上 (借鉴了b树,高效磁盘)
3、b+树的所有数据形成了一个线性表
4、加入了叶子节点加入了指针,区别于b 树最大的特点就是能直接从叶子节点进行范围查询遍历,大大的减小了磁盘的io时间以及次数,更快更牛逼
总结:为什么选择b+树 由来
- 最主流的数据库索引算法
- b+树有偶线性表、二叉树、b树发展而来
- b+树继承了线性表、AVL树(平衡二叉树的优势) ——查找速度快,范围查询性能高,磁盘利用率高
\