MYSQL的执行过程和日志介绍

sql的执行过程

第一步:客户端或者系统通过sql connection连接上MySQL数据库的连接器,连接器获取权限,维持管理连接;

第二步:当你往MySQL数据库发送一条sql,这个时候查询缓存开始工作,看看之前有没有执行过这个sql,如果有则直接返回缓存数据到客户端,只有对表执行过更新操作缓存都会失效,因此一些很少跟新的数据表可以考虑使用数据库缓存,对频繁跟新的表使用缓存反而弊大于利。使用缓存的方法如下sql:

select SQL_CACHE * from USER

第三步:当未命中缓存的时候,分析器开始工作;分析器判断你是select还是update还是insert,分析你的语法是否正确。

第四步:优化器根据你的表的索引和sql语句决定使用那个索引,决定join的顺序。

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

mysql的日志

mysql的日志介绍:MySQL有两个重要的日志–redolog和binlog,redolog是独属于innodb的日志,binlog则是属于server层的日志。当我们跟新数据库的数据的时候,这两个日志文件也会被跟新,记录数据库的跟新操作。

redolog有称作重做日志,用于记录实务操作的变化,记录的是数据修改之后的值,不管事务是否提交都会记录下来。它在数据库重启恢复的时候被使用,innodb利用这个日志恢复到数据库宕机前的状态,一次来保证数据的完整性。redolog是物理日志,记录的是某个表的数据做了那些修改,redolog是固定的大小的,也就是说后面的日志会覆盖前面的日志。

binlog有称作归档日志,他记录了对MySQL的数据库执行更该的所有操作,但是不包括select和show这类操作。binlog是逻辑日志,记录的是某个表执行了那些操作。binlog是追加形式的写入日志,后面的日志不会被前面的日志覆盖。

数据跟新过程

读取对应的数据到内存—>更新数据—>写redolog日志—>redolog状态为prepare—>写binlog日志—>提交事务—>redolog状态为commit,数据正式写入日志文件。redolog的提交方式为“两阶段式提交”,这样的目的是为了数据恢复的时候确保数据恢复的准确性,因为数据恢复是通过备份的binlog来完成的,所以要确保redolog和要binlog一致。

你可能感兴趣的:(SQL)