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’”。你觉得这个错误是在我们上面提到的哪个阶段报出来的呢?
 
 
 
 

posted on 2022-09-20 15:11  夏天的风49  阅读(14)  评论(0)    收藏  举报

导航