Mysql语句的执行过程
当你希望MySQL能够以更高的性能运行查询时,最好的办法是弄清楚MySQL是如何优化和执行查询。《高性能MySQL》
MySQL客户端与服务器端的通信特点
客户端与服务器之间是半双工通信,意味着服务器与客户端之间的传递数据不可以同时发生。
- 客户端使用一个单独的数据包将查询传给服务器。当语句过长时,可能受到服务器端max_allowed_packet的限制。
- 服务器响应给用户的数据通常会很多,由多个数据包组成。(客户端不断接受服务器推送的数据,客户端没有办法让服务器停下来。客户端像是“从消防水管喝水”)。
- 连接数据库的库函数缓存获取的数据。库函数需要花费很多时间和内存来存储结果集。
- 不使用缓存来记录结果而是直接处理。服务器的资源一直被查询占用,不利于并发操作。
查询的执行流程

图一 语句的处理过程
- 客户端发起一条Query请求,监听客户端的‘连接管理模块’接收请求。
- 将请求转发到‘连接进/线程模块’。
- 调用‘用户模块’来进行授权检查。
- 通过检查后,‘连接进/线程模块’从‘线程连接池’中取出空闲的被缓存的连接线程和客户端请求对接,如果失败则创建一个新的连接请求。
- 查询缓存 通过一个大小写敏感的哈希查找判断查询是否命中查询缓存的数据。
- 命中查询缓存,用户权限没有问题,MySQL直接从缓存中拿结果返回给客户端。
- 查询优化处理(解析SQL、预处理、优化SQL的执行计划),将SQL转化成一个执行计划。
- 解析和预处理:生成一棵解析树(《编译原理》的知识),MySQL按照其语法对解析树进行验证和解析查询。判断语法是否合法。
- 将语法树转化为执行计划(子任务),并选择成本尽量小的执行计划。
- 优化过程书上介绍了很多情况,请参考书籍6.43章
- 执行计划 MySQL会生成一个指令树,然后通过存储引擎完成这棵树并返回结果 如图2
- 查询执行引擎 查询执行引擎则根据执行计划来完成整个查询。在执行计划时,存储引擎通过调用实现的接口来完成。

图二 四个表的表连接查询的执行计划指令树
- 如果查询可以被缓存,MySQL将结果存放到查询缓存里。
- MySQL将结果集返回给客户端是一个逐步返回的过程;数据库开始产生第一个结果时,就可以开始向服务器返回结果集。
- 使用MySQL客户端、服务器通信协议进行封包。
- 通过Tcp协议传输数据。
Mysql语句的执行过程的更多相关文章
- 图解Mysql语句的执行过程
当我们希望Mysql能够高性能的执行查询语句时,其实最好的方法就是搞清楚Mysql到底是怎样执行查询的.一旦理解这一点,很多的查询优化工作实际上就是遵循一些原则让查询优化器能够按照预想的合理的方式运行 ...
- mysql中SQL执行过程详解与用于预处理语句的SQL语法
mysql中SQL执行过程详解 客户端发送一条查询给服务器: 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果.否则进入下一阶段. 服务器段进行SQL解析.预处理,在优化器生成对应的 ...
- 深入学习MySQL 01 一条查询语句的执行过程
在学习SpringCloud的同时,也在深入学习MySq中,听着<mysql45讲>,看着<高性能MySQL>,本系列文章是本人学习过程的总结,水平有限,仅供参考,若有不对之处 ...
- ORACLE数据库SQL语句的执行过程
SQL语句在数据库中处理过程是怎样的呢?执行顺序呢?在回答这个问题前,我们先来回顾一下:在ORACLE数据库系统架构下,SQL语句由用户进程产生,然后传到相对应的服务端进程,之后由服务器进程执行该SQ ...
- MySQL 语句中执行优先级——and比or高
转: MySQL 语句中执行优先级——and比or高 2017年04月20日 13:33:03 十步行 阅读数:7381 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...
- 神奇的 SQL 之 联表细节 → MySQL JOIN 的执行过程(二)
开心一刻 一头母牛在吃草,突然一头公牛从远处狂奔而来说:“快跑啊!!楼主来了!” 母牛说:“楼主来了关我屁事啊?” 公牛急忙说:“楼主吹牛逼呀!” 母牛大惊,拔腿就跑,边跑边问:“你是公牛你怕什么啊? ...
- mysql(1)—— 详解一条sql语句的执行过程
SQL是一套标准,全称结构化查询语言,是用来完成和数据库之间的通信的编程语言,SQL语言是脚本语言,直接运行在数据库上.同时,SQL语句与数据在数据库上的存储方式无关,只是不同的数据库对于同一条SQL ...
- 详细分析SQL语句逻辑执行过程和相关语法
本文目录: 1.SQL语句的逻辑处理顺序 1.2 各数据库系统的语句逻辑处理顺序 1.2.1 SQL Server和Oracle的逻辑执行顺序 1.2.2 MariaDB的逻辑执行顺序 1.2.3 M ...
- 【转载】详解一条sql语句的执行过程
转载自 https://www.cnblogs.com/cdf-opensource-007/p/6502556.html SQL是一套标准,全称结构化查询语言,是用来完成和数据库之间的通信的编程语言 ...
随机推荐
- java字符流
网上有很多地方说inputStreamReader和outStreamWriter.BufferedReader和BufferedWriter都是字符流.不过也有地方说inputStreamReade ...
- php simpleXML操作xml的用法
XML简介 XML是一种流行的半结构化文件格式,以一种类似数据库的格式存储数据.在实际应用中,一些简单的.安全性较低的数据往往使用 XML文件的格式进行存储.这样做的好处一方面可以通过减少与数据库的交 ...
- 【mysql】mysql基本操作
mysql基本操作 1.mysql表复制 mysql 表结构的复制 create table t2 like t2 mysql 表数据的复制 insert into t2 select * from ...
- Flex中的FusionCharts 3D饼图
1.3D饼图设计源码 <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns: ...
- 芝麻HTTP:Appium的安装
Appium是移动端的自动化测试工具,类似于前面所说的Selenium,利用它可以驱动Android.iOS等设备完成自动化测试,比如模拟点击.滑动.输入等操作,其官方网站为:http://appiu ...
- Spring Security验证流程剖析及自定义验证方法
Spring Security的本质 Spring Security本质上是一连串的Filter, 然后又以一个独立的Filter的形式插入到Filter Chain里,其名为FilterChainP ...
- 最新数组方法(包括es6)
整理目前所用过的数组方法,学习了新增的es6方法. 1 arr.push() 从后面添加元素,返回值为添加完后的数组的长度 let arr = [1,2,3,4,5] console.log(arr. ...
- 实例 编辑 .bashrc(不断更新)
.bashrc 是/root下的隐藏文件,可按习惯编辑命令的别名. vi .bashrc alias rm='rm -i'#alias cp='cp -i'alias mv='mv -i'alias ...
- ThinkCMF的跳转303 404等页面的方法
1. 控制器方法: return $this->redirect('http://www.thinkcmf.cmf',[],301); 或者助手函数: return redirect('http ...
- python基础—装饰器
python基础-装饰器 定义:一个函数,可以接受一个函数作为参数,对该函数进行一些包装,不改变函数的本身. def foo(): return 123 a=foo(); b=foo; print(a ...