MySQL之更新是如何执行的--读书笔记
通过上一篇文章,对MySQL的内部结构以及一条查询语句是如何执行的有了一个大概的认识。下面对MySQL的更新以及两个日志文件进行总结。 如图: 以上是一张MySQL更新的执行示意图。这张图较好地解释了一条sql是如何执行的。下面先对图中比较陌生的元素 redo log 和 binlog 进行介绍。 redo log: 翻译过来就是重做日志,是Innodb存储引擎特有的(Innodb原先是另外一家公司以插件形式加入到MySQL中),它是物理日志,只有Indobd能使用,记录的是“在某个数据页上做了什么修改”。它是一个环形,说明它是有固定大小的,从头写到末尾就要擦出一部分之后才能继续写。这边有一个 WAL 技术,后面再做详情介绍。 binlog: 翻译过来就是归档日志,在MySQL的server层,所以是所有存储引擎都共有的,它是逻辑日志,可以给别的数据库,引擎使用,记录的是这个语句的原始逻辑,如“给id=1的这一行的某个字段+1”。它不是环形,它是一直追加写入的,不会覆盖以前的日志。 WAL 技术: Wirte-Ahead logging,直译就是“先写日志”。为什么要先写日志呢?在MySQL中,我们的数据页有可能在内存中,也有可能在磁盘中,如果我们每次更新都去写磁盘,那么MySQL的更新操作的效率会很低。并且写日志时按照顺序写,可以以组的方式提交