Mysql学习笔记------架构
一、先从一条查询sql语句的流程开始说起:
先说流程,然后逐个解释:
Client --> 缓存 --> 解析器 --> 预处理器 --> 查询优化器 --> 生成执行计划 --> 执行引擎 --> 存储引擎
Client: 客户端发起查询请求,连接
缓存: 查询时若缓存中有想要的数据则直接到执行引擎步骤(Mysql5.7版本后缓存功能默认关闭)
解析器:
1-词法解析: 将sql语句解析为一个个单词.
2-语法解析: 检查sql是否有语法错误(如少符号,关键词错误等)
解析完毕后得到解析树.
结构如下:
预处理器: 对解析后的sql树进行验证(如表,字段是否存在等)
查询优化器: 一条sql语句可以通过多种方式来执行得出对应的结果,而优化器则会从中选择消耗最低的方式来执行.如果想查询优化器得出哪几种优化方式可以开启追踪器进行查询
开启追踪器: set optimizer_trace=“enabled=on”
查询执行方式: show variables like ‘optimizer_trace’;
执行计划: 优化器优化后会得到执行计划,sql语句之前添加 explain 可查询执行计划
执行引擎: 用来执行执行计划
存储引擎: 存储引擎相当于表的存储类型,每张表都可以指定相应的存储引擎,数据也是存储在存储引擎中,存储引擎决定了数据存放的位置(内存或磁盘)
Mysql原来默认存储引擎为Myisam,现在时InnoDB(支持事务,行级别的锁,外键,XA(两阶段提交)等)
根据步骤可以看出Mysql的架构并不复杂,大体可以分为三层:
连接层(连接mysql),服务层(执行sql业务),存储引擎层(存储数据), 是不是有点像controller,service,dao三层?