Mysql语句的执行过程

当你希望MySQL能够以更高的性能运行查询时,最好的办法是弄清楚MySQL是如何优化和执行查询。《高性能MySQL》

衡量查询开销的三个指标

  1. 响应时间扫描的行数
    1. 服务时间(处理这条语句真正花的时间)
    2. 排队时间(等待资源,例如IO,行锁等)
  2. 扫描的行数
  3. 返回的行数

当删除了搜索条件列的索引时,语句进行全表扫描,扫描的行数为5073。如图一

图一 扫描行数

MySQL客户端与服务器端的通信特点

客户端与服务器之间是半双工通信,意味着服务器与客户端之间的传递数据不可以同时发生。

  1. 客户端使用一个单独的数据包将查询传给服务器。当语句过长时,可能受到服务器端max_allowed_packet的限制。
  2. 服务器响应给用户的数据通常会很多,由多个数据包组成。(客户端不断接受服务器推送的数据,客户端没有办法让服务器停下来。客户端像是“从消防水管喝水”)。
    1. 连接数据库的库函数缓存获取的数据。库函数需要花费很多时间和内存来存储结果集。
    2. 不使用缓存来记录结果而是直接处理。服务器的资源一直被查询占用,不利于并发操作。

查询的执行流程

图二 语句的处理过程

1.连接数据库

  1. 客户端发起一条Query请求,监听客户端的‘连接管理模块’接收请求。
  2. 将请求转发到‘连接进/线程模块’。
  3. 调用‘用户模块’来进行授权检查。
  4. 通过检查后,‘连接进/线程模块’从‘线程连接池’中取出空闲的被缓存的连接线程和客户端请求对接,如果失败则创建一个新的连接请求。

2.处理请求

  1. 查询缓存 通过一个大小写敏感的哈希查找判断查询是否命中查询缓存的数据。
    1. 命中查询缓存,用户权限没有问题,MySQL直接从缓存中拿结果返回给客户端。
  2. 查询优化处理(解析SQL、预处理、优化SQL的执行计划),将SQL转化成一个执行计划。
    1. 解析和预处理:生成一棵解析树(《编译原理》的知识),MySQL按照其语法对解析树进行验证和解析查询。判断语法是否合法。
    2. 优化器和执行计划:将语法树转化为执行计划(子任务),并选择成本尽量小的执行计划。
      1. 优化过程书上介绍了很多情况,请参考书籍6.43章
      2. 执行计划 MySQL会生成一个指令树,然后通过存储引擎完成这棵树并返回结果 如图2
  3. 查询执行引擎  查询执行引擎则根据执行计划来完成整个查询。在执行计划时,存储引擎通过调用实现的接口来完成。

 图三 四个表的表连接查询的执行计划指令树

3.返回结果

  1. 如果查询可以被缓存,MySQL将结果存放到查询缓存里。
  2. MySQL将结果集返回给客户端是一个逐步返回的过程;数据库开始产生第一个结果时,就可以开始向服务器返回结果集。
    1. 使用MySQL客户端、服务器通信协议进行封包。
    2. 通过Tcp协议传输数据。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据和云

Oracle 12.2新特性掌上手册 - 第一卷 Availability

注:文章内容来自官方文档翻译。若需要了解更多,请查阅官方文档。 1、Multi-Instance Redo Apply (多实例redo应用) 在Oracle ...

39760
来自专栏北京马哥教育

MySQL 数据库上线后根据 status 状态优化

马哥linux运维 | 最专业的linux培训机构 ---- 网上有很多的文章教怎么配置mysql服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些文...

32960
来自专栏企鹅号快讯

十个实用MySQL命令

前言 今天介绍一些MySQL常用的实用命令,都是一些比较简单的命令。已经知道的朋友,就当是巩固吧,不知道的童鞋,可以好好在自己的机器上,练习下。 0. 显示数据...

19990
来自专栏Java架构师历程

MYSQL 谈谈各存储引擎的优缺点

1、存储引擎其实就是如何实现存储数据,如何为存储的数据建立索引以及如何更新,查询数据等技术实现的方法。

32920
来自专栏张善友的专栏

SQL Server 2008 FILESTREAM特性管理文件

在SQL Server 2008中,新的FILESTREAM(文件流)特性和varbinary列配合,你可以在服务器的文件系统上存储真实的数据,但可以在数据库上...

24560
来自专栏北京马哥教育

SQLite这么娇小可爱,不多了解点都不行啊

简介 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统。它的设计目标是嵌入式的,目前Android和iOS的设备内置的都是SQLite数...

37980
来自专栏大眼瞪小眼

MySQL基础复习

2NF:每一个非主属性完全依赖于候选码(属性组的值能唯一的标识一个元组,但是其子集不可以)。

10120
来自专栏数据和云

DB2 Vs MySQL系列 | 体系架构对比

前些日子,我们做了DB2 VS MySQL的数据类型的对比,今天我们将体系架构的对比分享给大家,让大家对这两类数据库有更深刻的认识。 ? DB2体系结构 ? ?...

33450
来自专栏技术碎碎念

sql server 2008 基础知识

一、配置管理器 1.管理服务   使用配置管理器可以启动、停止、重新启动、继续或暂停服务。   服务器和客户端网络协议 2.SQLSMS   简介:SQLSMS...

36950
来自专栏LhWorld哥陪你聊算法

Mysql篇--Linux中安装Mysql

由于Windows安装Mysql非常麻烦,所以分享一篇Linux中对MySQL的搭建,废话不多说,来,come on.

38620

扫码关注云+社区

领取腾讯云代金券