SQL语句在MYSQL中的运行过程和各个组件的介绍

时间:2022-07-23
本文章向大家介绍SQL语句在MYSQL中的运行过程和各个组件的介绍,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一. Mysql的组件有哪些?

  1. mysql是由两层组成的:客户端,连接器,查询缓存(MYSQL8.0以后没有这个数据)分析器,优化器,执行期,存储引擎。

二.各个组件所负责的责任是什么?

连接器: 权限校验,查看登录用户是否有权限访问数据库,如果出错就会出现(Access denied for user)然后运行程序就结束了如果连接成功连接器就会去查看这个用户的权限,即以后的权限逻辑都是依赖于次权限,在连接过程中如果长时间没有操作则会在默认的时间内进行断开连接(wait_timeout)。

长连接:当用户在一次连接后不断开频繁使用,(长连接)但是会出现MysqL的内存飙升的问题,因为长连接里面的的对象不会去被销毁的会一直积压,只有当断开连接的时候才会进行销毁,所以可以设置默认的值进行断开连接,也可以通过(Mysql_reset_connection)来重新初始化连接资源,这个操作不需要重新连接,但是会恢复到重新连接的状态。

短连接:少量用户的使用,在使用完之后进行断开,创建一次连接也是一个复杂的过程。

查询缓存:当通过权限校验的时候,如果有查询缓存的条件则会,通过key value 的形式进行查询缓存如果有相对应查询语句的key值 如果有的话就进行返回。但是缓存里面的数据会因为表的update而被清空。当一个表频繁被更新的时候所以说大部分都是查不出来的,但是针对于表数据会定时刷新或者不一些不会经常改变的数据,则是可以的, 设置查询是否查询缓存,可以将query_cache_type设置成DEMAND,这样对于默认的SQL语句不回去查询缓存,设置之后如果你想去查寻缓存的话 你可以进行显式查找。

select SQL_CACHE * FROM T WHERE ID =10;

分析器:对SQL语句进行词法分析,查看是否有语法上的问题,并且将对应的表名进行对应在数据库的表,然后分析器会进行语法分析,通过词法分析的结果进行语法分析,来判断zheduan语句是否符合MYSQL的语法 如果符合就会通过进行下一步,如果错误则会报错

you  hava an  erro in your SQL  syntax ;check  the manual that .......

优化器: 优化器是当表中有多个索引的时候来决定使用那个索引,或者在一个语句有多表关联的时候,决定各个表的连接执行顺序。

执行器:MYSQL通过分析器知道了要干什么,通过优化器知道了该怎么做,进入执行器即开始使用优化器的方法来做分析器分析去来的任务。

在开始执行的时候还是会进行查看是否会有权限(此处的权限是通过)如果没有就会出现权限错误,,如果有权限则会打开表之举引擎的定义,去使用这个引擎提供的接口 连接接口进行查询的操作操作的时候如过这个表中没有索引则执行顺序就是:

  1. 通过InnoDB引擎接口取表中的第一行,判断是有where中的字段中的条件值(如:ID =10)则判断是否符合条件存在就存在结果集中;
  2. 继续取下一行,重复判断直到表中的最后一行
  3. 返回收集的结果集

对于有索引的表,执行逻辑也差不多。第一次调用的是满足“取满足条件的第一行(算是一个算法,每次都可以获取到有结果集的值)” 第二次也是调用的:“获取满足条件的下一行)” 这些接口都是引擎中创建好的。(ROWS_EXAMINED字段 表示这个语句执行过程中扫描了多少行,这个值就是在执行器每次调用引擎接口获取数据行的时候累加的)