mysql执行流程

执行流程

大概分成7个步骤

客户端发sql请求

查询缓存

很鸡肋,高版本中已经废弃

解析器

Parser:对语句基于 SQL 语法进行词法和语法分析和语义的解析

  1. 词法解析:把一个完整的 SQL 语句打碎成一个个的单词
  2. 语法解析:语法分析会对 SQL 做一些语法检查,比如单引号有没有闭合,然后根据 MySQL 定义的语法规则,根据 SQL 语句生成一个数据结构。这个数据结构我们把它叫做解析树(select_lex)
  3. 任何数据库的中间件,比如 Mycat,Sharding-JDBC(用到了 Druid Parser),都必须要有词法和语法分析功能,在市面上也有很多的开源的词法解析的工具(比如 LEX,Yacc)

预处理

Preprocessor:检查语义是否正确

  1. 如果我写了一个词法和语法都正确的 SQL,但是表名或者字段不存在,会在哪里报错?是在数据库的执行层还是解析器?
  2. 解析器可以分析语法,但是它怎么知道数据库里面有什么表,表里面有什么字段呢?实际上还是在解析的时候报错,解析 SQL 的环节里面有个预处理器。它会检查生成的解析树,解决解析器无法解析的语义。比如,它会检查表和列名是否存在,检查名字和别名,保证没有歧义。预处理之后得到一个新的解析树

查询优化器

Optimizer:查询优化器的模块,基于成本的优化器

  1. 一条 SQL 语句是可以有很多种执行方式,最终返回相同的结果,他们是等价的

  2. 查询优化器的目的就是根据解析树生成不同的执行计划(Execution Plan),然后选择一种最优的执行计划,MySQL 里面使用的是基于开销(cost)的优化器,选用开销最小的执行计划

  3. 查看查询的开销

    show status like 'Last_query_cost';
    
  4. 准备阶段、优化阶段和执行阶段,优化之后生成执行计划

执行计划

  1. 查看执行计划

    EXPLAIN select name from user where id=1;
    -- 格式化的执行计划
    explain FORMAT=JSON select * from tb_base;
    

执行引擎 -》存储引擎

返回结果到客户端

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ljt-tiger

thanks

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值