Mysql服务器处理客户端请求流程
在日常执行mysql语句的过程中,都是客户端进程向服务器进程发送一段文本(MySQL语句),服务器进程处理后再向客户端进程发送一段文本(处理结果). 看似很简单,其实不然,这内容有很多东西是需要注意的.下面借用两张图来说明,其实两张图表示的意思都是一样.

上面的图对于中间的解析和优化不是很透彻,下面的图将解析和优化说的更明确.

接下来就分开说明下:
连接管理/连接器
连接器就是用来客户端和服务器进程之间建立连接的,这个方式有很多,比如说TCP/IP,命名管道或共享内存等等,这个阶段的连接需要客户端提供主机信息,用户名以及密码,服务器会对提供的信息进行认证,不仅仅是账户密码的匹配,还有权限的验证.
解析优化
解析优化阶段是非常重要的一个阶段,主要包括了查询缓存(8中取消),语法解析和查询优化.
查询缓存
这个的意思的Mysql服务器程序处理请求,会把刚刚请求过的查询请求和结果缓存起来,,下一次有一模一样的请求过来,直接从缓存中查找结果会更快.如何缓存的呢?其实就是键值对的形式,键就是查询的sql语句,值就是查询出来的结果.
注意重点是一模一样,也就是出现虽然查询的结果一样,但是不会命中缓存的情况. 也就是两个查询请求在任何字符上的不同(例如:空格、注释、大小写),都会导致缓存不会命中。还有,如果查询请求中包含某些系统函数、用户自定义变量和函数、一些系统表,如 mysql 、information_schema、 performance_schema 数据库中的表,那这个请求就不会被缓存。
缓存什么失效呢? Mysql的缓存系统会检测涉及到每张表,只要该表的结构或者数据被修改,如对该表使用了INSERT、 UPDATE、DELETE、TRUNCATE TABLE、ALTER TABLE、DROP TABLE或 DROP DATABASE语句,那使用该表的所有高速缓存查询都将变为无效并从高速缓存中删除!
至于在Mysql8中为什么会取消缓存?是因为维护缓存会造成部分开销,所以就取消了.
语法解析
如果缓存没有命中呢? 那么接下来才是真正的开始执行,当服务器接收到sql语句的时候,并不会立即执行,而是进行分析,包括了词法分析,语法分析,语义分析等. 词法分析会分析出这条sql语句的关键词,表名和列名等等.语法分析则会分析这条sql语句是否有错误,比如关键字select是否正确等,至于语义分析,我的感觉就是分析出这条语句是查询,修改还是删除等,这个下去再研究下.
语法解析就是上面的样子.
查询优化
mysql会对我们写的sql语句进行一些优化,如外连接转换为内连接、表达式简化、子查询转为连接等,优化的结果就是生成一个执行计划,这个计划表名该sql语句会使用什么索引进行查询,执行的顺序是什么,这个很重要, 我们可以通过explain语句来查看某个语句的执行计划.
执行
上面那么多操作都还没有开始真正的查询数据,真正的查询数据就交给执行器来做把,在真正开始执行前会判断当前用户是否有操作的权限,有的话会根据操作表的结构去存储引擎操作,mysql服务器把数据的存储和提取操作都封装在存储引擎中,至于存储引擎中怎么存储,这个以后再详细了解.
不过要知道的是mysql的存储引擎有很多,最最常见的就是InnoDB和MyISAM了,我的印象中这两个的最大区别就是前者支持事务,后者不支持事务.至于存储方面我下午再研究一下. 不过重点应该放在InnoDB,这次就说一下执行流程,就到这.
本人也是学习者,如果有误还请指出,本人会进行修改.
Mysql服务器处理客户端请求流程的更多相关文章
- Ubuntu 14.04下MySQL服务器和客户端的安装
下面进行简单的配置 安装完成后通过修改/etc/mysql/my.cnf(此文件为mysql的配置文件).将文件中的binding-address=127.0.0.1注释掉.其它配置根据需要更改. H ...
- 后端向服务器发送客户端请求--HttpWebRequest
HttpWebRequest类与HttpRequest类的区别 HttpRequest类的对象用于服务器端,获取客户端传来的请求的信息,包括HTTP报文传送过来的所有信息. HttpWebReques ...
- 2-Ubuntu命令安装mysql服务器和客户端及安装后的简单验证操作
转自: https://www.cnblogs.com/zhuyp1015/p/3561470.html 安装完成之后可以使用如下命令来检查是否安装成功: sudo netstat -tap | ...
- http的Content-Encoding和Content-Type及服务器和客户端处理流程
比如,A 给 B发送了一条信息:hello,首先,A要告诉B,我给你发的这条数据的类型,不同类型的数据,接收方的处理方式不一样,hello属于文本类型,所以Content-Type就要设置成 text ...
- 你的MySQL服务器开启SSL了吗?SSL在https和MySQL中的原理思考
最近,准备升级一组MySQL到5.7版本,在安装完MySQL5.7后,在其data目录下发现多了很多.pem类型的文件,然后通过查阅相关资料,才知这些文件是MySQL5.7使用SSL加密连接的.本篇主 ...
- MySQL架构与SQL执行流程
MySQL架构设计 下面是一张MySQL的架构图: 上方各个组件的含义如下: Connectors 指的是不同语言中与SQL的交互 Management Serveices & Utiliti ...
- mysqladmin - 管理 MySQL 服务器、获取运行状态
官方文档 mysqladmin 是管理 MySQL 服务器的客户端,可以用来检测服务器的配置和当前状态.创建和删除数据库等. 1. mysqladmin 的调用语法 shell> mysqlad ...
- Node fs, url, http 组合小型的服务器 ( 满足html请求, get, post 传值 )
<script type="text/javascript"> /* * 引入模块 */ var http = require('http'); var url = r ...
- MySQL服务器是怎么处理客户端请求的
不论MySQL客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:客户端进程向服务器进程发送一段文本(MySQL语句),服务器进程处理后再向客户端进程发送一段文本(处理结果).那服务器进 ...
随机推荐
- A2dp初始化流程源码分析
蓝牙启动的时候,会涉及到各个profile 的启动.这篇文章分析一下,蓝牙中a2dp profile的初始化流程. 我们从AdapterState.java中对于USER_TURN_ON 消息的处理说 ...
- .Net架构篇:思考如何设计一款实用的分布式监控系统?
前言 无论从最早期的unix操作系统,还是曾经大行其道的单体式应用,还是现在日益流行的微服务架构,始终都离不开监控的身影.如windows的任务管理器,linux的top命令,都可以看作是监控的面板. ...
- ABP+AdminLTE+Bootstrap Table权限管理系统第三节--abp分层体系,实体相关及ABP模块系统
返回总目录:ABP+AdminLTE+Bootstrap Table权限管理系统一期 ABP模块系统 说了这么久,还没有详细说到abp框架,abp其实基于DDD(领域驱动设计)原则的细看分层如下: 再 ...
- Python-注册登陆-20
username = input('请输入你要注册的用户名:') password = input('请输入你要注册的密码:') with open('list_of_info',mode='w',e ...
- 个人博客week2
1. 是否需要有代码规范 对于是否需要有代码规范,请考虑下列论点并反驳/支持: 这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 我是个艺术家,手艺人,我有自己的规 ...
- 《Linux内核分析》实践4
<Linux内核分析> 实践四--ELF文件格式分析 20135211李行之 一.概述 1.ELF全称Executable and Linkable Format,可执行连接格式,ELF格 ...
- 《Linux内核分析》chapter4
- IT行业的创新的读后感
一.什么是创新 创新是以新思维.新发明和新描述为特征的一种概念化过程.它原意有三层含义,第一,更新:第二,创造新的东西:第三,改变.创新是人类特有的认识能力和实践能力,是人类主观能动性的高级表现形式, ...
- 第三个Sprint冲刺第五天(燃尽图)
- 07-java学习-方法重载-idea集成开发工具学习-项目-模块-包
方法重载的概念? 方法重载的好处? 集成开发工具idea的学习 下载 安装 设置 建项目 导入项目 建模块 导入模块 建包 复制粘贴包 建类 复制粘贴类 运行 调试