先看看一条SQL如何入库的
数据写入详细过程
应用服务器与MySQL建立连接通过连接发送一条SQL语句(update student set score=100 where score=50)SQL依次经过Server层的[分析器][优化器][执行器][执行器]根据[执行计划]操作执行引擎(InnoDB Engine)InnoDB Engine从[磁盘]数据文件中将score=50读取到内存[BufferPool]中在修改之前,写入一条[undo log]将修改之前的值score=50保存起来先将缓存池[BufferPool]中score=50更新为score=100写入一条[redo log]将修改后的score=100存起来,用于异常场景的事务[提交]写入一条[bin log]将修改后的score=100存起来后台IO线程将缓存池被修改的值score=100刷入磁盘为什么要拆分出两层架构
这是一条非常简单的SQL语句[update student set score=100 where score=50],从MySQL服务端接收SQL到写入磁盘,经过了Server层和InnoDB存储引擎,中间掺杂着磁盘读取、日志记录、内存更新、写入磁盘。
MySQL为什么将Server层和引擎层拆分?
- 针对不同的场景,使用不同的存储引擎,灵活性更强
- MySQL中的数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力
MySQL主要包含2种存储引擎
- MyISAM(不支持事务,访问速度快)
- InnoDB(主流,支持事务)
郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。