1、《基础架构流程图》
01 | 基础架构:一条SQL查询语句是如何执行的?
前言

MySQL 的基本架构示意图
-
其中Server层中除了图中包含的,还包括所有的内置函数(比如日期、时间、数学、加密函数),以及跨储存引擎的功能(比如存储过程、视图、触发器等)。
-
最底层:存储引擎,它负责数据的提取和存储。其架构是插件式,支持InnoDB、MyISAM、Memory等多个引擎。
一、连接器
mysql -h$ip -P$port -u$user -p
连接数据库,获取权限、维持和管理这个连接。
查看数据库的所有连接:show processlist

Command列:sleep就表示该连接处于空闲模式。
长期处于空闲状态,连接会默认断开,时间限制是由参数 wait_timeout (秒)控制的,默认值是 8 小时。show variables like 'wait_timeout';
二、查询缓存
查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。
只有当我们有一张静态表,这张表几乎不会新增/更新数据,只会做查询,那么我们可以启用查询缓存的功能。
MySQL 8.0 版本直接将查询缓存的整块功能删掉了,也就是说 8.0 开始彻底没有这个功能了。
三、分析器
词法分析、语法分析。
四、优化器
优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。

五、执行器
权限校验(判断有无该表的权限)
执行sql语句
六、本章问题
如果表 T 中没有字段 k,而你执行了这个语句 select * from T where k=1, 那肯定是会报“不存在这个列”的错误: “Unknown column ‘k’ in ‘where clause’”。你觉得这个错误是在我们上面提到的哪个阶段报出来的呢?
浙公网安备 33010602011771号