MySQL学习地图

1、MySQL架构

大体来说,MySQL可以分为Server层和存储引擎层两部分:

      Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。

      而存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多个存储引擎。现在最常用的存储引擎是InnoDB,它从MySQL 5.5.5版本开始成为了默认存储引擎。

参考资料:基础架构:一条SQL查询语句是如何执行的?

2、日志系统

  • redo log:保证 crash-safe 能力
  • binlog:主从同步,高可用
  • undo log:事务回滚,实现 MVCC

参考资料:

必须了解的mysql三大日志-binlog、redo log和undo log

日志系统:一条SQL更新语句是如何执行的

MySQL是怎么保证数据不丢的?

MySQL是怎么保证主备一致的?

3、索引

索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。

数据结构选择

  • 哈希表这种结构适用于只有等值查询的场景,不适合做区间查询
  • 有序数组在等值查询和范围查询场景中的性能就都非常优秀,但更新成本高
  • 为了兼顾查询和更新的效率,并减少磁盘 IO,InnoDB 选择了 B+ 树

Tips:B树与B+树

漫画算法:什么是 B 树?

漫画算法:什么是 B+ 树?

参考资料: 

 深入浅出索引(上)

深入浅出索引(下)

普通索引和唯一索引,应该怎么选择?

4、事务

简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在 MySQL 中,事务支持是在引擎层实现的。你现在知道,MySQL 是一个支持多引擎的系统,但并不是所有的引擎都支持事务。比如 MySQL 原生的 MyISAM 引擎就不支持事务,这也是 MyISAM 被 InnoDB 取代的重要原因之一。

 MVCC:

图中的三个虚线箭头,就是 undo log;而 V1、V2、V3 并不是物理上真实存在的,而是每次需要的时候根据当前版本和 undo log 计算出来的。比如,需要 V2 的时候,就是通过 V4 依次执行 U3、U2 算出来。  

5、锁

数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。

根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。

MySQL 的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁。

在 InnoDB 事务中,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放,而是要等到事务结束时才释放。这个就是两阶段锁协议。

行锁,分成读锁和写锁:  

 

参考资料:

面试中的老大难-mysql事务和锁,一次性讲清楚!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值