![](https://img-blog.csdnimg.cn/direct/2448c193492449808c5c9594ff67f281.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
MySQL知识点总结
文章平均质量分 95
图文并茂讲解MySQL的各个知识点,包括索引、SQL优化、事务、MVCC、锁、InnoDB底层架构、主从复制、读写分离、MySQL高可用等各方面的知识,适合新手入门,也适合老手复习。
黄俊懿
放下期待、不抱希望地努力,踏踏实实,能走多远是多远。
展开
-
MySQL知识点总结(七)——主从复制、读写分离、高可用
当dump线程被用户线程唤醒后,就会进行binlog同步,把binlog日志中最新写入的内容同步到从节点,从节点的IO线程写入relay log成功后,响应主节点的dump线程,主节点的dump线程再去通知用户线程。不同的MySQL版本,提供的分发方式不一样,比如老版本的MySQL只支持按库分发,而新版本的MySQL则支持按行分发,使用的是哪种分发方式,这取决于MySQL的版本以及相应的配置,这里就不深入细说了。因此,主节点的写并发量过大时,从节点就会跟不上主节点的写入速度,造成主从延迟。原创 2024-03-02 13:30:30 · 1148 阅读 · 0 评论 -
MySQL知识点总结(六)——InnoDB底层架构
比如我们要查询id为1的一条记录,InnoDB就会查找到id为1的记录所在的数据页,把它加载到内存中,Buffer Pool就会把该数据页缓存起来,当我们下次再读取id为1的记录,或者与之相邻的同在一个数据页中的其他记录,就无需再从磁盘中把该数据页读到内存,而是直接在该页中查找并返回,这样就提升了查询性能。首先我们要明白一点,MySQL是以页(16KB)为单位进行读取,也就是即使我们查询的是一行数据,MySQL也会读取一个页到内存中,也就是磁盘中该行记录所在的数据页,这是基于局部性原理的一个设计。原创 2024-02-24 19:38:21 · 1273 阅读 · 0 评论 -
MySQL知识点总结(五)——锁
接下来分析一下,各种不同情况下InnoDB都是如何加锁的,加的是行锁?间隙锁?还是next-key lock?然后分别对哪些行记录加锁。在分析之前,我们首先要明白一点,InnoDB的行锁都是加在索引上的,也就是对索引上锁,InnoDB只会对扫描到的索引加锁,没有扫描到的索引是不会加锁的,并且只会对索引中被扫描到的行记录和间隙上锁。可重复读隔离级别下的加锁机制可重复读隔离级别下,加锁的原则是对被扫描到的索引行记录以及它前面的区间加临键锁next-key lock,但是等值查询时扫描到最后的一条不满足原创 2024-02-24 19:36:35 · 2542 阅读 · 0 评论 -
MySQL知识点总结(四)——MVCC
MVCC全称是Multi Version Concurrency Control,也就是多版本并发控制。它的作用是提高事务的并发度,通过MVCC机制,数据库可以不通过加锁,也能保证事务的隔离性。MySQL的InnoDB存储引擎也有自己的MVCC机制的实现,通过MVCC机制保证了“读已提交”和“可重复读”两个隔离级别下的隔离性。要理解MVCC,就要理解InnoDB里面的三样东西:“数据行记录中的三个隐式字段”、“undo log”、“read view”。理解了这三个东西,也就是理解了MVCC。原创 2024-02-03 11:08:24 · 1292 阅读 · 0 评论 -
MySQL知识点总结(三)——事务
当MySQL重启时,发现没有redo log,那么当前数据库的库表是不存在此次事务的修改的,但是binlog却记录事务的修改,同步到从库时,从库就比主库多了一次更新,于是又出现了主从不一致。比如先提交redo log,再记录binlog,此时就有可能出现这种情况:提交完redo log后MySQL宕机了,没来得及记录binlog,此时MySQL重启后,发现redo log是有的,于是当前库表的修改是生效的,但是如果我们配了主从同步,由于binlog上是没有修改记录的,因此同步到从库时,从库就少了一次修改。原创 2024-02-03 11:03:57 · 1032 阅读 · 0 评论 -
MySQL知识点总结(二)——explain执行计划、SQL优化
但是要注意的时,这里之所以扫描result表时MySQL走了索引,是因为不需要回表查询result表中需要返回的字段,如果返回结果中包含了result表中的某个字段,并且这个字段是“idx_score_studentno”中没有的,那么由于有回表查询的成本,MySQL就不会走这个索引。这样,因为索引中的score排列是有序的,MySQL就不需要进行文件排序,并且MySQL可以从联合索引中取到关联查询需要的studentno字段,因此,也不需要回表。in查询是拿in子查询的结果,到外层查询的表中进行匹配;原创 2024-01-28 20:15:21 · 1003 阅读 · 0 评论 -
MySQL知识点总结(一)——一条SQL的执行过程、索引底层数据结构、一级索引和二级索引、索引失效、索引覆盖、索引下推
回表一般是因为我们建立二级索引时只包含一个索引键,没有包含要查询的其他字段,如果我们建立二级索引时,连同其他需要查询返回的字段一起建立一个二级联合索引,使得需要查询返回的字段在二级索引叶子节点中都有,MySQL就不会回表,这时候二级索引一般都会生效。这样,MySQL通过二级索引进行查询时,发现二级索引的叶子节点已经包含了所有需要查询返回的字段,就不会再回表查询,这样查询性能就会大大提高,原本由于大量回表而导致二级索引失效,通过这种优化手段,会使得MySQL会选择这个二级索引进行查询。原创 2024-01-28 20:11:10 · 1297 阅读 · 0 评论