执行一条 select 语句,期间发生了什么?

八股王冒险 two day


前言


一、MySQL 执行流程是怎样的?

  1. 创建连接器:首先要客户端要创建一个连接器,用来连接mysql(mysql分为两层,分别是server层和存储引擎)。
  2. 查询缓存:连接器先查询缓存,如果缓存里有记录即直接得到结果返回给连接器。注意:mysql8里移除了查询缓存这一步
  3. 解析器:这时sql语句就到了解析器这一步了。在这一步解析器先通过词法分析(词法分析用于查找到sql关键词),词法分析通过后sql语句进入语法分析(语法分析中用于检查sql语法是否正确)。最后构建语法树。
  4. 执行sql语句:在这一步中也是有几个步骤的,首先要通过预处理器(检查 SQL 查询语句中的表或者字段是否存在;将 select * 中的 * 符号,扩展为表上的所有列;),再通过优化器(优化器主要负责将 SQL 查询语句的执行方案确定下来,比如在表里面有多个索引的时候,优化器会基于查询成本的考虑,来决定选择使用哪个索引。)最后进入执行器(在执行的过程中,执行器就会和存储引擎交互了,交互是以记录为单位的)

所以,执行一条 SQL 查询语句,期间发生了什么?

  • 连接器:建立连接,管理连接、校验用户身份;
  • 查询缓存:查询语句如果命中查询缓存则直接返回,否则继续往下执行。MySQL 8.0 已删除该模块;
  • 解析 SQL,通过解析器对 SQL 查询语句进行词法分析、语法分析,然后构建语法树,方便后续模块读取表名、字段、语句类型;
    执行 SQL:执行 SQL 共有三个阶段:
    • 预处理阶段:检查表或字段是否存在;将 select * 中的 * 符号扩展为表上的所有列。
    • 优化阶段:基于查询成本的考虑, 选择查询成本最小的执行计划;
    • 执行阶段:根据执行计划执行 SQL 查询语句,从存储引擎读取记录,返回给客户端;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值