1.存储引擎
1.1数据库的存储引擎有哪些?
InnoDB、MyISAM和MEMORY
1.2 InnoDB和MyISAM的区别?
区别 | InnoDB | MyISAM |
---|---|---|
是否支持事务 | 支持 | 不支持 |
是否支持外键 | 支持 | 不支持 |
锁 | 行锁(基于索引完成行锁) | 表锁 |
跨平台支持 | 跨平台支持拷贝使用 | 跨平台很难支持拷贝使用 |
适用范围 | 读少写多,并发写入高 | 读多写少,原子性要求低 |
注意:行锁特点:内存开销大,加锁速度较慢,粒度小,所冲突低,并发高
表锁特点:内存开销小,不会出现死锁,并发低
2. 索引
2.1 索引是什么?
是帮助mysql高效获取数据排好序的数据结构
2.2 mysql 底层数据结构?
B+树
2.3 番外篇:各个树种(数据结构)讲解
二叉树:是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分(子树的右边的值永远比左边的值大)
弊端:如下图,如果数据只有比上一个数值更大的值,因为右边的值会总比左边的大的这个原则,所以就会形成单一的一条线的树,查询速度更慢,和数组wu’区别
红黑树(二叉平衡树):它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树
图一
图二
讲解:二叉平衡树两棵子树的高度差不能超过1,所以当一直输入大的值的时候会出现平衡及左旋或者右旋
弊端:如果当数据量特别大的时候,红黑树会一直维持平衡,导致树的叶子节点过多。如图
B树:英文名字叫做B-tree,中间的短线是英文连接符,只是翻译的时候将短线翻译成了减号。全称Balance-tree(平衡多路查找树),平衡的意思是左边和右边分布均匀。多路的意思是相对于二叉树而言的,二叉树就是二路查找树,查找时只有两条路,而B-tree有多条路,即父节点有多个子节点。
弊端:每个节点存储索引和索引值,所以不适用mysql,因为每次在读取数据的时候,根据计算机或服务器的性能的问题,每次读取会读取一页数据(这个一页大小根据计算及性能,普通应该一页数据为16kb左右),所以每次读取数据带索引和索引值,导致性能低下,浪费时间。
Hash:散列技术是指在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使每一个关键字都对应一个存储位置。即:存储位置=f(关键字)。这样,在查找的过程中,只需要通过这个对应关系f 找到给定值key的映射f(key)。只要集合中存在关键字和key相等的记录,则必在存储位置f(key)处。我们把这种对应关系f 称为散列函数或哈希函数. 按照这个思想,采用散列技术将记录存储在一块连续的存储空间中,这块连续的存储空间称为哈希表。所得的存储地址称为哈希地址或散列地址
弊端:会产生hash碰撞,,无法进行范围性查询
B+树:B+树是B树的一种变形,不存储索引值,只存储索引,B+树的值存储在在最后一层的节点上,最后一层的叶子节点是连接在一起。所以使用在数据库
2.4 B+和B树的区别?
B树的叶子节点存储索引和索引的值,而B+树只存储索引并树值存储在最后一层节点上。
B+树最后一曾层节点每个叶子节点是联系在一起的更易进行范围查询。
2.5 mysql为什么使用B+树?
1.减少io次数,例如查询全部数据。
2.减少内存的使用,b树节点带值,增加内存的开销,所以同样内存键值存储较B+树较少
3.查询时间加不稳定,b树越靠近根节点,时间就越短
4.b树较b+树增删数据时耗时长,因为b树本身带数据
2.6索引优缺点?
优点:
(1)每一行数据的唯一性
(2)加快数据的检索速度
(3)减少分组和排序的时间
(4)优化隐藏起,提升系统性能
缺点
(1)占用物理空间
(2)创建和维护索引耗费时间
2.7索引的基本原理
1.索引列排序
2.排序结果生成倒排表
3.倒排表拼上数据地址链
4.查询时,根据倒排表取出数据地址链,最后在拿到数据
2.8联合索引
多字段同时建立索引,叫做联合索引
联合索引基本原理:如果联合索引为三个字段,先通过第一个字段排序,如第一个字段相同,再通过第二个字段排序,以此类推。
2.9联合索引的最左匹配原则解释
如联合索引,a.b为联合索引字段 a=1 and b=1 ,如果将a =1