当前位置:   article > 正文

查询SQL的执行流程是怎样的,你知道吗?_网站动作如何知道执行了什么sql操作

网站动作如何知道执行了什么sql操作

首先,图示简单描述一下MYSQL的大体架构。其大体结构与一般的管理系统架构类似,我们将重点关注Server层:【连接器,查询缓存,分析器,优化器和执行器】

 

1.连接器:用户与客户端建立连接,获取权限,维持和管理连接;

 

****连接方式****

  • 短连接:操作完成后,马上close掉;

  • 长连接:

长时间保持连接,减少服务端创建和释放连接的消耗,后面的程序访问时可以直接使用本连接(连接池使用)。默认连接时间是8小时,超时后服务器会自动将连接断开,客户端再次请求会报错!

如何解决超时断开连接问题?

1)使用程序定时断开长连接。使用一段时间后,或者程序里面执行一个占用内存的大查询后,断开连接,之后使用再重连。

2)MYSQL5.7版本及以后,执行一个大操作后,通过执行mysql_reset_connection来重新初始化连接资源。(初始化过程中无需重连和权限验证)

2.查询缓存:通过key-value形式<sql,value>存储起来,mysql默认关闭缓存(8.0之后版本没有此功能);

3.分析器:   对要执行的sql语句进行解析,最终得到抽象语法树,然后再使用预处理器判断抽象语法树中的表是否存在,存在时判断select 投影列字段是否在表中存在。

SQL---解析---->抽象语法树----判断表是否存在---判断字段是否存在

***3.1词法分析***

将sql拆解为不可再分的原子符号(Token)。根据不同数据库方言所提供的字典,将其归类为关键字,表达式,字面量和操作符。

***3.2语法分析***

根据词法分析拆解出的Token,将SQL语句转换为抽象语法树。

我们来看一个简单的栗子

SElECT id,name FROM t_user WHERE status = 'ACTIVE' AND age > 18;

经过词法分析和语法分析后,我们可以得到如下的抽象语法树,后面的工作均已本语法树为基础。

绿色代表SQL关键字,红色代表字面量和字段

***3.3预处理器处理***

对生成的【抽象语法树】进行语义校验(对查询的表,select字段进行校验,判断表和对应的字段是否存在)

4.优化器:将分析器得到的语法树,通过数据字典和统计信息的内容经【一系列运算】,得到一个【执行计划

***一系列运算***

1)逻辑变换:将where条件中的条件表达式进行化简或者计算,转换为布尔或者确定值;

2)代价优化:通过一些数据统计分析的代价,来判断这个SQL执行是否可以走索引,以及走哪些索引,此外,在多表关联查询中,确定表join的顺序。

5.执行器:开始执行时判断建立连接的对象是否有权限访问对应的对象,有权限时按照执行计划执行,没有权限时,返回没有权限的错误信息。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/278565
推荐阅读
相关标签
  

闽ICP备14008679号