浅析SQL执行过程

最近一直在做系统的性能优化,同时也复习了一下mysql的知识,这里整理一下。

Mysql查询过程

这里忽略细节,简单介绍一下Mysql执行一条查询语句的基本过程。
在这里插入图片描述
组件介绍

  • 缓存: 查询结果的缓存
  • 解析器: 解析sql
  • 优化器: 选择最优路径,生成执行计划
  • 执行引擎: 判断用户与表的权限关系,执行查询
  • 存储引擎 : 真正存储数据和索引的地方

流程描述

  1. 客户端发送一条查询语句给服务器
  2. 服务器从缓存中取,命中直接返回,没有命中则继续下一步
  3. 解析器解析SQL,预处理
  4. 优化器选择最优路径,生成执行计划
  5. 执行引擎根据执行计划,调用存储引擎的api执行查询
  6. 缓存查询结果并返回数据

查询细节

这里重点关注执行引擎与存储引擎的交互细节。因为开发同学很少会用到 Mysql中的缓存,解析器,优化器相关知识(其实是因为我暂时不了解)。
这里分两种情况来讨论执行引擎与存储引擎的交互细节

  • 不走索引的查询过程
    不走索引的查询过程
    1. 执行引擎调用存储引擎的API,返回一行数据的
    2. 执行引擎判断数据是否符合where条件,符合则加入结果集,否则就跳过
    3. 重复1,2两个步骤,直到存储引擎返回的数据为空(查询到最后一条数据了)
    4. 返回结果集
  • 走索引的查询过程
    走索引的查询过程
    1. 执行引擎调用存储引擎的API
    2. 存储引擎从索引中筛选处符合条件的数据,取第一行(下一次请求取符合条件的下一行,依次顺序往下)
    3. 存储引擎判断是否需要回表,是则回表取出数据返回,否则直接返回数据行
    4. 执行引擎判断数据是否符合所有的where条件(如果部分条件不能走索引,还是需要在执行引擎中进行筛选),符合则加入结果集,否则就跳过
    5. 重复以上4个步骤,直到存储引擎返回的数据为空(查询到最后一条数据了)
    6. 返回数据集

执行引擎和存储引擎的区别

其实上面的流程已经足够理解执行引擎和存储引擎的区别了,简单总结一下。

  • 执行引擎 是mysql自带的,不可替换,不可选择,负责sql的执行,通过api调用存储引擎,获取数据,并会进行数据的筛选与返回。
  • 存储引擎 真正保存数据与索引的组件。有很多mysql可用的存储引擎可以选择,最广为人知的如InnoDB和MyISAM。可以在创建数据表的时候选择存储引擎。每个存储引擎有自己的实现方式,只需要提供符合Mysql规范的api即可。

参考资料:
《高性能Mysql》
《MySQL技术内幕-InnoDB存储引擎》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值