- 结构模型
- 客户端
- server层
- 引擎层
客户端mysql可以划分成3个层次,自上而下分别是:客户端 -> server层-> 引擎层
server层用于建立和服务端的连接(连接时用到了经典的TCP握手)
语句执行流程
- 连接器
登录认证,登录成功后会查询一次权限表,该连接之后的权限验证都依赖于这次查询的结果(之后有权限的变动需要重新登录才会生效) - 查询缓存(Mysql8.0后移除)
如果查询语句命中了缓存,则直接返回结果,返回前会进行一次权限验证,未命中则往下执行键值对形式存储,key为完整的查询语句
Mysql8.0之后被移除(缓存失效频繁,一个表上的一个更新会导致与该表有关的缓存全部失效,弊大于利) - 分析器
词法分析:识别各字符串在语句中扮演的角色,例:select * from t,t扮演的 是表的角色
语法分析:判断是否符合Mysql的语法规则 - 优化器
选择mysql认为的(优化器选择的执行方案并不一定是最佳的)性能最佳的执行方案,执行前会调用一次precheck权限验证 - 执行器
遍历(调用引擎接口)存储引擎中的数据,并判断,将符合条件的记录放入结果集中,最后统一返回客户端
常用引擎:MyISAM、InnoDB、Menony
查询(InnoDB)
执行器调用引擎接口,引擎在内存的数据页中查找符合条件的记录 记录不存在于内存中,从磁盘中读入符合条件的数据(随机IO)所在的数据页,放入内存中
更新
查询需要改动的记录(查询流程) 更新内存中的数据页数据,写入redo log,此时状态为prepare 写binlog 提交,变更redo log状态为commit
参考:极客时间 Mysql45讲专栏 作者:林晓斌, 网名"丁奇",腾讯云数据库负责人



