sql语句的执行流程

MYSQL的架构

  1. 连接层
  2. 服务层
  3. 存储引擎层

SQL语句的执行流程

在这里插入图片描述

  1. 建立连接
    连接数默认151 最大10000

  2. 查询缓存
    默认关闭 8.0删除 比较鸡肋,因为缓存触发条件苛刻,eg:查询语句完全一样;数据库有数据更新缓存会清空

  3. 解析器
    词法解析 将sql打散成一个一个的词
    语法解析 对sql进行语法检验;同时将词法解析成的词语 按照语法规则生成特定的数据结构 ----解析树

  4. 预处理器
    检查生成的解析树,处理解析器无法解析的语义,比如表名、列名是否存在,检查名字和别名保证没有歧义 同时会生成新的解析树

  5. 查询优化器
    一条Sql语句可以有很多种执行方式,但是返回的结果是一样的。查询优化器的目的就是基于解析树生成不同的解析计划,从中选择一个最优的执行计划;MYSQL里面使用的是基于开销的优化器,那种执行计划开销最小就是用哪种。
    比如:多表关联查询,基准表的选择;多个索引可以使用时候,选择哪个索引;

  6. 执行计划

    优化器优化解析树会得到另一个数据结构的数据-----查询执行计划 使用EXPLAIN可以查看

  7. 执行引擎
    使用执行计划操作存储引擎,通过存储引擎提供的API完成,得到结果最后返回给客户端;

  8. 存储引擎
    存储数据的形式。
    MYISM 适用只读的场景 支持表锁、记录数据行数、插入和查询较快
    INNODB 支持表锁、行锁、外键、事务;支持读写并发,写不阻塞读(MVCC);特殊的索引存放,可以减少IO,提升查询效率
    MEMORY 适用临时表 数据存在内存中,读写快;数据库崩溃或者宕机,数据消失;

一条更新SQL的执行

1、建立连接,事务开启,查询缓存(可跳过,默认不开启),然后通过解析器词法解析,语法分析,预处理等生成解析树,然后通过查询优化器获得一个开销最小的执行计划,然后通过执行引擎调用API接口操作存储引擎获取数据,返回查询结果给server的执行器;

2、server的执行器修改数据页中的一行数据;

3、记录修改日志到undo log

4、记录日志到redo log

5、调用存储引擎接口,记录数据页到buffer pool中

6、事务提交;

修改数据的时候会先写入缓冲区的数据页中,因此缓冲区的数据页与磁盘中的数据出现了数据不一致的现象,此时的数据页被称为脏页;将脏页数据更新到磁盘的过程称为刷脏

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值