MySQL架构理解

 

1.MySQL的分层

MySQL分为2层:Server层和存储引擎。

 

2.Server层

  • 连接器:管理连接权限验证。

  • 查询缓存:命中缓存直接返回查询结果。

  • 分析器:分析语法。

  • 优化器:生成执行计划,选择索引。

  • 执行器:操作索引返回结果。

 

3.存储引擎

  • 存储引擎负责数据的存储和提取,其架构是插件式的。InnoDB在MySQL5.5版本开始成为其默认存储引擎。

  • MySQL常用的存储引擎有三种:InnoDB、MyISAM、Memory。

    • InnoDB:支持事务,支持外键,是聚集索引,数据文件和索引是绑在一起的。必须要有主键,通过主键索引效率最高。但是辅助索引需要两次查询,先查询到主键,然后通过主键查询到数据,不支持全文索引。

    • MyISAM: 不支持事务,不支持外键,是非聚集索引,数据文件和索引是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的,查询效率上MyISAM要高于InnoDB,因此做读写分离的时候一般选择InnoDB做主库,MyISAM做从库。

    • Memory:文件数据保存在缓存中,有比较大的缺陷。如果Mysqld进程发生异常,重启或关机这些数据都会丢失。

 

4.SQL的执行过程

  • 第一步:客户端连接上MySQL的数据库连接器,连接器获取权限维持链接,如果长时间没有使用会断开,这个时间由wait_timeout控制。

  • 第二步:客户端往数据库发送sql语句,此时会检测查询缓存检查之前是否执行过这个sql,如果执行则直接返回缓存数据到客户端,当然只要更新缓存就会失效。因此更新频繁的表不建议使用查询缓存,查询缓存可以通过SQL_CACHE指定。

  • 第三步:当查询未命中缓存,分析器则开始工作,分析器会判断sql语句的类型:select、insert、update,分析语法是否正确。

  • 第四步:优化器将根据表的索引和sql语句决定使用什么索引和join的顺序。

  • 第五步:执行器执行sql,调用存储引擎的接口,扫描遍历表或者插入更新数据。

 

5.MySQL日志

  • MySQL有两个重要的日志:redolog和binlog。redolog属于innodb的日志,binlog则是属于sever层的日志。

  • redolog日志:

    • redolog又称为重做日志,用于记录事务操作的变化,记录修改之前和修改之后的值,无论事务是否提交都会记录下来。

    • 数据库重启恢复时会用到redolog保证数据的完整性,redolog是固定大小的,因此后面的日志会覆盖前面的日志。

  • binlog日志:

    • binlog又称为归档日志,它记录了数据库的所有更改操作。

    • binlog是追加形式记录日志,后面的日志不会覆盖前面的日志。

  • 数据库更新过程

    • 更新的过程:读取对应的数据到内存 --> 更新数据 --> 写入redolog日志 --> redolog状态为prepare --> 写入binlog日志 --> 提交事务 --> redolog状态为commit ,数据正式写入日志文件。

    • reolog的提交方式是“两段式提交”。

    •  

 

 

 

 注:主要内容来自公众号《江南一点雨》

上一篇:Mysql存储引擎文件


下一篇:浅谈Mysql的查询过程与执行流程