Day15
1. MySQL主从同步是如何实现的?
- 复制是mysql数据库提供的一种高可用高性能的解决方案,一般用来建立大型的应用。总体来说,复制的工作原理分为以下3个步骤:
- 主服务器把数据更改记录到二进制日志中
- 从服务器把主服务器的二进制日志复制到自己的中继日志中
- 从服务器重做中继日志中的日志,把更改应用到自己的数据库上,以达到数据的最终一致性
- 复制不是完全同步地实时进行,而是异步实时。这中间存在主从服务器之间的执行延时,如果主服务器压力很大,则可能导致主从服务器延时较大
2. 请你说说聚簇索引和非聚簇索引
- 聚簇索引和非聚簇索引最大的区别就是数据域是否和索引项分离。
- 聚簇索引一般采用数据表中的具有唯一性的字段(primary,unique)作为索引,采用b+树结构,在叶子结点存储具体的数据,所以其找到的索引也就找到了具体的数据。
- 非聚簇索引数据域和索引项是分离的,它的b+树叶子结点存储的是其数据对应的主键值,获取到主键值后再回表进入聚簇索引中查找具体的数据
- 一个表中只能有一个聚簇索引,但是可以有多个非聚簇索引
3. 请你说说数据库引擎有哪些,各自有什么区别
- InnoDB:支持事务处理,支持外键,支持崩溃修复能力和并发控制
- Myisam:支持表级锁,查询效率高,空间占用低,并发性要求比较低,常用于只读或以读取为主的场景。
- Memory:所有数据都在内存中,查询效率高,但是安全性不高,它对表的大小有要求,不能建立太大的表
4. 数据库为什么不用红黑树而用B+树?
其实最核心的原因就是效率,红黑树它是一个近似平衡的二叉树,它的树高最高都不会超过2*logn,所以它的性能相对稳定,但是它本质上还是一个二叉树,当数据量多的时候,会增加树高,也就增加了和硬盘的IO次数。而B+树是多叉的,所以他能有效地降低磁盘的IO次数,并且它的非叶子结点已经不存放数据了,数据全部存放在叶子节点中,并且已经排序好了,这也符合我们日常对于范围查找和排序的一个要求,所以综合来讲,b+树更合适
5. 请你介绍一下数据库的ACID
- ACID是数据库事务保证数据安全的四大特性
- 原子性:即事务是一个不可分割的最小单元,要么一次性执行成功,要么失败
- 一致性:表示数据库的一个稳定的状态,经过一次事务数据库只会从一个一致性的状态转变为另一个一致性的状态
- 隔离性:一个事务在执行过程中其他并发事务不会对该事务构成任何影响
- 持久性:指一个事务一旦被提交,那么它所修改的数据将永远更新到数据库,不会受到任何其他事务的回滚影响
6. 请你说说数据库的索引是什么结构,为什么不用哈希表
- 范围查询:b+树支持有序的范围查询,因为b+树的内部结构可以方便地进行范围查找。而哈希表不支持有序性,因此不适合处理范围查询
- 有序性:B+树是一种有序数据结构,这对于某些查询和排序操作非常有用。例如,对于order by子句或者group by子句
- 磁盘存储:b+树的结构天然适合磁盘存储。b+树的叶子结点形成一个有序的链表,这对于范围查询和顺序IO操作非常有利。相比之下,哈希表通常需要在内存中进行处理,因为哈希表的碰撞处理在磁盘上处理会变得复杂,因此在大数据量下,不可能使用哈希表
- 块IO操作:b+树适用于块IO操作,可以通过顺序IO来提高性能。
- 动态性能:b+树的动态性能较好,对于插入和删除操作的支持更好。哈希表可能需要重新调整大小,而这可能导致性能波动