Mysql架构与内部模块-第一章
Mysql作为大多数中小型企业的首选数据库,也可能是众多同僚接触的第一个数据库,其热门程度不言而喻,一些相对基础的知识本系列不做赘述,主要简述Mysql相关的进阶知识。
本章将由浅入深的讲解从连接Mysql Server 到 执行第一条SELECT语句,这其中到底发生了什么。
首先我们看一张图

上图展示了Mysql客户端与服务端,当我们需要使用到数据库时,第一步,肯定是连接。
连接到Mysql Server
Mysql采用C/S模式构成整个技术架构,意味着Mysql定有一个服务端监听某个端口,等待着客户端的连接,这里可以引出一个问题,Mysql客户端使用何种方式进行连接?
1.TCP
2.unix socket协议
其中unix socket的方式,当你在Mysql Server端使用mysql命令进行连接时,会使用到Mysql Server服务器上的数据目录(可在Mysql客户端执行 show VARIABLES like 'data' 查看)下的mysql.sock文件进行连接,此处不多做赘述,如果有兴趣了解,可寻找相关资料。
除了unix socket协议, 客户端连接服务端,使用TCP协议进行连接,无论是Mysql Client GUI还是代码连接。
在引出一个问题,Mysql Client采用TCP的方式进行连接,那么是长连接还是短连接?
短连接需要频繁的建立连接,此方式对于数据库来说肯定是不合适,所以采用的是TCP 长连接,并且Mysql有一套专门的机制,可以使得TCP 长连接具有可回收特性,此处后续讲,此处不做赘述。
在引出一个问题,Mysql Client 连接采用TCP 长连接,是同步还是异步?
做一个实验:
在Mysql Client GUI (Mysql Workbench)中,执行一条SQL :SELECT * FROM member_info

可以明显的看到,当客户端命令发送到服务端后,客户端成阻塞状态,直到服务端返回数据后,客户端才可继续操作,并不是语句提交完毕,语句就结束了,此举是为了尽量避免在查询过程中,源数据发生变化导致结果不一致。
可能有朋友会怀疑这个阻塞状态是GUI的特性,实际上通过mysql提供的命令式程序查询,行为也是一样。
由此可得,Mysql Client 连接服务端,采用TCP 长连接 同步。
查询缓存组件
接下来我们再举一个例子:

member_info表大约存在2万数据,我们执行一段SQL:SELECT * FROM member_info

查询出全部数据,共耗时6.568秒
思考一个问题:当我第二执行同样的查询语句时,耗时是否会减少?
再次执行一次:SELECT * FROM member_info

可以得出,时间并没有减少,按理说,Mysql如此成熟的产品,一定会有一个叫做缓存的机制,用来缓存查询结果,提高后续查询的响应速度,但是从例子中看,是没有的。
实际上Mysql确实拥有缓存机制,只是默认是关闭的。
执行:show variables like 'query_cache%'

为什么Mysql默认关闭缓存,是因为要使用Mysql的缓存,需要满足一系列极为苛刻的条件,比如需要SQL语句完全一模一样等条件,具体的可以查阅相关资料,本文不做赘述。
而且Mysql官方本身也并不推荐大家使用此缓存机制。
由于以上原因,所以Mysql决定在8.0(含)开始,丢弃缓存部分。将此部分交给更加专业擅长的第三方。
本系列以Mysql 5.7为准
接下来补充一下一开始的图片。

解析器组件
举个例子,我们在GUI输入任意非SQL字符串执行:

可以看到Mysql Server 给客户端返回了一个语法错误的响应,为什么Mysql Server能够判断我的语句是否正确呢?
原因在于,Mysql Server拥有一个 解析器 的组件,此组件能够对你的SQL文本进行语法+词法分析,此部分详细的内容篇幅较大,有兴趣的朋友可以查阅相关资料,后续有
时间我也会另开文章进行说明。
至此,我们的图在更改一下:

本章先到此为止,明日继续更新下一章节,敬请期待。
Mysql架构与内部模块-第一章的更多相关文章
- Mysql架构与内部模块-第二章
		
接上文,上文简述到了Mysql中的查询缓存和解析器,今日我们继续. 先来看一段SQL:SELECT * FROM `jianghuadong`; 先假设我们数据库中并没有一张名为jianghuadon ...
 - Mysql架构与内部模块-第三章
		
前言 接上文,本篇文章专门简述Mysql存储引擎,内容繁多,如果你只需知道每种存储引擎的适用场景,可以直接查看本文最后列出的适用场景部分. 正文: Mysql存储引擎作为本系列文章中相对重要的一环,也 ...
 - .net架构设计读书笔记--第一章 基础
		
第一章 基础 第一节 软件架构与软件架构师 简单的说软件架构即是为客户构建一个软件系统.架构师随便软件架构应运而生,架构师是一个角色. 2000年9月ANSI和IEEE发布了<密集性软件架构建 ...
 - 大型分布式架构设计与实现-第一章SOA(面向服务的体系架构)
		
拜读了大型分布式架构设计与实现,觉得该书作为入门不错,但内容过于简单,描述过于琐碎,小节之间连续性不强,不适合深入钻研学习.但为了更多的希望向架构师行业靠拢的工程师学习需要,本博客将对上书进行简化讲解 ...
 - Mysql必知必会 第一章 了解SQL
		
第一章 了解SQL 1.1 数据库基础 1.1.1 什么是数据库 数据库的定义:保存有组织的数据的容器 数据库软件不是数据库,而是DBMS 1.1.2 表 表(Table)的定义:某种特定类型数据的结 ...
 - 第一模块第一章 review
		
---恢复内容开始--- 练习题: 1.简述编译型与解释型语言的区别,且分别列出你知道的那些属于编译型,哪些属于解释型 机器语言:由于计算机内部只能接受二进制代码,因此,用二进制代码0和1描述的指令称 ...
 - 高性能MySQL(第4版) 第一章 MySQL架构 读书笔记
		
这本书去年11月出的,今年中文版也出了,并且直接上了微信读书,之后有空就读一读,分享下读书笔记~ 原文内容比较充实,建议有时间可以读一下原文. 第一章主要是个概览. MySQL的逻辑架构 默认情况下, ...
 - 第一章  MYSQL的架构和历史
		
在读第一章的过程中,整理出来了一些重要的概念. 锁粒度 表锁(服务器实现,忽略存储引擎). 行锁(存储引擎实现,服务器没有实现). 事务的ACID概念 原子性(要么全部成功,要么全部回滚). 一致性 ...
 - 第 2 章 MySQL 架构组成
		
麻雀虽小,五脏俱全.MySQL 虽然以简单著称,但其内部结构并不简单.本章从MySQL物理组成.逻辑组成,以及相关工具几个角度来介绍 MySQL 的整体架构组成,希望能够让读者对 MySQL 有一个更 ...
 
随机推荐
- 20190923-07Linux搜索查找类 000 015
			
find 查找文件或者目录 find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端. 1.基本语法 find [搜索范围] [选项] 2.选项说明 表1-27 选项 功能 -n ...
 - 20190923-04Linux用户管理命令 000 012
			
useradd 添加新用户 1.基本语法 useradd 用户名 (功能描述:添加新用户) useradd -g 组名 用户名 (功能描述:添加新用户到某个组) 2.案例实操 (1)添加一个用户 [ ...
 - C#开发PACS医学影像处理系统(二):界面布局之菜单栏
			
在菜单栏布局上,为了使用自定义窗体样式和按钮,我们需要先将窗体设置为无边框,然后添加一个Grid作为菜单栏并置顶,VerticalAlignment="Top" logo图片和标题 ...
 - 关于while (~scanf("%d %d", &m, &n))的用法
			
其功能是循环从输入流读入m和n,直到遇到EOF,有如下关系: while (~scanf("%d %d", &m, &n)) ↔ while (scanf(&quo ...
 - xss原理解析
			
xss->跨站脚本攻击 xss是指攻击者在网页中嵌入客户端脚本.通常是指javascript编写的一个危险代码,当用户使用浏览器浏览网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的. ...
 - python血脉贲张的cosplay小姐姐图片
			
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 基本环境配置 python 3.6 pycharm requests 相关模块pip安装即可 ...
 - CentOS 正在连接 127.0.0.1:8118... 失败:拒绝连接。
			
今天centos使用wget下载东西的时候出现了 看下是否开启了代理 yicunyiye@yicunyiye:~/redis$ export | grep -i proxy declare -x ft ...
 - kubeadm单集群部署k8s1.15.1&calico网络
			
说明 本次实验在Windows下的VMware进行 系统配置及初始化配置在所有的主机执行 容器镜像全部替换为国内可拉取的 pod网络采用calico 实验环境 主机名 IP地址 角色 OS CPU/M ...
 - O、Θ、Ω&主定理
			
1.这些是时间复杂度的.(e.g. O(n).Θ(n).Ω(n)) 主要为主定理(坏东西) 2.本质 O <= Θ = Ω >= 3.(你可以把他们都试一遍)主要用处(目前,2020-09 ...
 - Spring学习(二)--Spring的IOC
			
1.依赖反转模式 依赖反转:高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口.抽象接口不应该依赖于具体实现.而具体实现则应该依赖于抽象接口. 在面向对象编程领域中,依赖反转原则(Depe ...