一分钟弄懂MySQL查询语句执行过程!
author:一佰互联 2019-03-26   click:181

简介:想要学好一门技术,最基本的要求是摸清其原理和作用。学习MySQL也是如此,只有清晰的理解SQL语句执行的整个过程,才能更好的进行SQL的编写和优化。平时我们使用最多SQL语句类型是DQL和DML,今天我们主要介绍的是查询 ...

想要学好一门技术,最基本的要求是摸清其原理和作用。学习MySQL也是如此,只有清晰的理解SQL语句执行的整个过程,才能更好的进行SQL的编写和优化。

一分钟弄懂MySQL查询语句执行过程!


平时我们使用最多SQL语句类型是DQL和DML,今天我们主要介绍的是查询语句。

首先,当MySQL收到一个请求时,它到底会如果执行?
  1. 客户端发送请求给MySQL Server层;
  2. Server层连接器会进行权限检查和连接管理等;
  3. 验证通过后先判断是否命中了缓存,如果是则返回缓存中的结果,否则继续执行;
  4. 解析器对SQL语句进行解析,生成对应解析树;
  5. 预处理器会进一步根据MySQL规则进行检查解析树是否合法,例如字段是否存在;
  6. 优化器将根据解析树生成最优(实际可能并不是)执行计划;
  7. 执行器调用存储引擎接口获取数据

MySQL基本架构


一分钟弄懂MySQL查询语句执行过程!


通过上图我们可以看出,Server层包括连接管理、权限验证、查询缓存、语法分析、查询优化等MySQL的核心服务功能,下面将一一介绍各个模块的功能。

连接器


主要负责建立连接和管理连接,校验用户权限等。

解析器


进行词法分析,语法分析后生成解析树。

预处理器


处理解析器无法分析的语义,检查用户对目标数据的权限等,生成新的解析树。

优化器


如同它的名字一样,它会尽可能选择最优的路径获取数据。

执行器


获取表的基础结构信息,根据不同的存储引擎调用对应接口获取数据。

要点总结

  1. 尽量不要使用Query cache,频繁的缓存失效会严重影响整体的性能,除非某个表执行DDL和DML的频率非常低。值得一提的是,MySQL 8.0版本已移除该功能;
  2. 优化器生成的执行计划不一定就是最优的,特别是存在多个索引可使用且数据分布不均匀的情况下。

了解了整体的执行流程之后,我们来看看查询语句的解析顺序。

SELECT语句解析顺序


通常来讲,我们一个查询语句会写成这样:

一分钟弄懂MySQL查询语句执行过程!


那么是不是就意味着程序会按照我们写的关键字顺序去执行,显然不是!

程序实际上是这么执行的:

一分钟弄懂MySQL查询语句执行过程!


大致分为以下三步执行:

第一步:确定从哪获取数据;

第二步:执行各种过滤条件;

第三步:选择符合条件的数据;

看出可以程序找到数据后会一步步进行过滤,最后只返回符合条件的记录,整个过程非常自然。

尾声


时间仓促,难免有所疏漏,但是希望你读完之后对于SQL查询过程有宏观的理解,如果有问题,欢迎在下方进行留言。


参考书籍:
  • 《MySQL性能调优与架构实践》
  • 《高性能MySQL》

本文仅代表作者个人观点,不代表巅云官方发声,对观点有疑义请先联系作者本人进行修改,若内容非法请联系平台管理员,邮箱2522407257@qq.com。更多相关资讯,请到巅云www.yinxi.net学习互联网营销技术请到巅云建站www.yx10011.com。