一条sql语句在MySql中的执行流程

目录

一、sql关键字的执行顺序

二、Mysql

1、连接器

2、查询缓存

3、分析器

4、优化器

5、执行器

三、可以将SQL语句执行分为两种种情况

1、查询语句

2、增删改


一、sql关键字的执行顺序

from、where、select、group by_having 、order by 、limit

二、Mysql

  • Mysql主要分为Server层和引擎层
  • server主要包括连接器、查询缓存、分析器、优化器、执行器等,还有一个binlog(日志模块,用于整个数据库操作记录)
  • 存储引擎层主要负责数据的存储和读取

1、连接器

  • 客户端想要对数据库进行操作时,连接器就是用来负责跟客户端建立连接、获取权限、维持和管理连接的。
  • 连接器支持短连接也支持长连接,为了避免频繁创建和销毁连接造成性能损失,可选择利用连接池进程管理,如druid,c3p0等

2、查询缓存

  • 用来执行我们所执行的select语句以及该语句的结果集。如果开启了查询缓存,执行查询语句的时候,会先查询缓存,如果缓存中有,就会将缓存的结果直接返回给可会断。
  • 但是当表中的数据频繁变动的时候,不推荐使用。因为当一张表的数据要是发生变化,所有的缓存都将清空

3、分析器

  • 分析器主要是对要执行的sql语句进行解析,sql引擎会把语句转换成一个抽象的语法树
  • 词法分析

提取关键字,比如select,提出要查询的表,提出字段名,提出要查询的条件等

  • 语法分析

把提出的关键字转换为抽象的语法树后进行检验。

  • 去判断你的sql是否正确,是否符合mysql的语法

4、优化器

  • 根据执行该条sql语句可能会用到的方案,然后选择一条Mysql认为的效率最高的方式,并生成执行计划。比如一张表创建了多个索引,优化器会根据io和cpu成本,选择最优索引执行

5、执行器

  • 根据执行计划完成sql语句的操作,执行前会去验证用户有没有权限。如果没有权限就会返回错误信息。如果有权限,就回去调用引擎接口,返回执行结果

三、可以将SQL语句执行分为两种种情况

1、查询语句

select * from student where ssex='男' and classid=1;
  • 先去检查语句是否有权限,如果没有权限,就会返回错误信息,如果有权限,就会西安查缓存查询,如果这条sql语句为key在缓存中查询有结果,则返回。
  • 通过分析器进行词法分析,提取sql语句的关键元素。比如上面的语句是select,提取关键字,表名student,条件ssex=男,classid=1.
  • 然后去判断sql语句是否有语法错误,提取的关键字是否有错误。没有就执行下一步
  • 优化器确定优化方案:查询是男的学生;查询班级编号为1 的学生
  • 优化器会根据自己的判断去选择一个自己认为最好的方案去执行
  • 进行权限验证

2、增删改

update student set ssex='女' where classid=1
  • 先去查询一般这个数据,如果有缓存的话也是会用到缓存
  • 然后拿到查询的语句,把性别改为女,然后去调用引擎api接口,写入修改的数据,存储引擎innodb把数据保存在内存中,写入日志中,告诉执行器执行
  • 执行器执行,提交事务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值