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架构与内部模块-第一章的更多相关文章

  1. Mysql架构与内部模块-第二章

    接上文,上文简述到了Mysql中的查询缓存和解析器,今日我们继续. 先来看一段SQL:SELECT * FROM `jianghuadong`; 先假设我们数据库中并没有一张名为jianghuadon ...

  2. Mysql架构与内部模块-第三章

    前言 接上文,本篇文章专门简述Mysql存储引擎,内容繁多,如果你只需知道每种存储引擎的适用场景,可以直接查看本文最后列出的适用场景部分. 正文: Mysql存储引擎作为本系列文章中相对重要的一环,也 ...

  3. .net架构设计读书笔记--第一章 基础

    第一章 基础 第一节 软件架构与软件架构师  简单的说软件架构即是为客户构建一个软件系统.架构师随便软件架构应运而生,架构师是一个角色. 2000年9月ANSI和IEEE发布了<密集性软件架构建 ...

  4. 大型分布式架构设计与实现-第一章SOA(面向服务的体系架构)

    拜读了大型分布式架构设计与实现,觉得该书作为入门不错,但内容过于简单,描述过于琐碎,小节之间连续性不强,不适合深入钻研学习.但为了更多的希望向架构师行业靠拢的工程师学习需要,本博客将对上书进行简化讲解 ...

  5. Mysql必知必会 第一章 了解SQL

    第一章 了解SQL 1.1 数据库基础 1.1.1 什么是数据库 数据库的定义:保存有组织的数据的容器 数据库软件不是数据库,而是DBMS 1.1.2 表 表(Table)的定义:某种特定类型数据的结 ...

  6. 第一模块第一章 review

    ---恢复内容开始--- 练习题: 1.简述编译型与解释型语言的区别,且分别列出你知道的那些属于编译型,哪些属于解释型 机器语言:由于计算机内部只能接受二进制代码,因此,用二进制代码0和1描述的指令称 ...

  7. 高性能MySQL(第4版) 第一章 MySQL架构 读书笔记

    这本书去年11月出的,今年中文版也出了,并且直接上了微信读书,之后有空就读一读,分享下读书笔记~ 原文内容比较充实,建议有时间可以读一下原文. 第一章主要是个概览. MySQL的逻辑架构 默认情况下, ...

  8. 第一章 MYSQL的架构和历史

    在读第一章的过程中,整理出来了一些重要的概念. 锁粒度  表锁(服务器实现,忽略存储引擎). 行锁(存储引擎实现,服务器没有实现). 事务的ACID概念 原子性(要么全部成功,要么全部回滚). 一致性 ...

  9. 第 2 章 MySQL 架构组成

    麻雀虽小,五脏俱全.MySQL 虽然以简单著称,但其内部结构并不简单.本章从MySQL物理组成.逻辑组成,以及相关工具几个角度来介绍 MySQL 的整体架构组成,希望能够让读者对 MySQL 有一个更 ...

随机推荐

  1. String.format与搭配转化符的使用

    String的format语法搭配转化符,在格式化输出方面效果特别好,值得掌握. 例程: System.out.println("----C1---|----C2---|----C3---| ...

  2. Zookeeper启动流程分析

    前言 之前的Zookeeper协议篇-Paxos算法与ZAB协议通过了解Paoxs算法开始,到Zab协议的两大特性:崩溃恢复和消息广播,学习了Zookeeper是如何通过Zab协议实现高可用,本篇主要 ...

  3. mysql 5.7密码策略和安装密码校验插件validate_password

    当执行sql:SHOW VARIABLES LIKE 'validate_password%';提示empty,说明没有安装密码插件 1.查看当前mysql安装的插件信息 mysql> show ...

  4. 初等函数——幂函数(Power Function)

    幂函数(Power function)是形如f(x)=xa的函数,a∈R是实数.即以底数为自变量,幂为因变量,指数为常数的函数称为幂函数. 性质 幂函数的图像一定会出现在第一象限内,一定不会出现在第四 ...

  5. MySQL页分裂和页合并

    预备知识了解,索引页,数据页,b+tree 页是innoDB中管理储存空间的基本单位,页有很多中,存放数据的叫做索引页.

  6. Windows Server系统部署MySQL数据库

    由于工作需要在阿里云服务器中使用MySQL,所以安装一下MySQL数据库,中间也踩了一些坑,现在将整个过程给大家记录下来,便于后续查找. 阿里云服务器是WinServer2012系统,之前在Windo ...

  7. Django ContentType(ORM操作)

    ContentType-设计课程表 # 数据: """ 免费课:Python入门 学位课:Python全栈 价格策略: Linux入门 7 0 Python入门 7 0 ...

  8. 最全总结 | 聊聊 Python 数据处理全家桶(Redis篇)

    1. 前言 前面两篇文章聊到了 Python 处理 Mysql.Sqlite 数据库常用方式,本篇文章继续说另外一种比较常用的数据存储方式:Redis Redis:Remote Dictionary ...

  9. 多NX如何共存

    在安装NX时,本机已经装了NX其他版本,只能修改当前程序,无法安装,那么多NX如何共存? 如图:先安装了32位NX8.5,后安装64位NX 8.5时弹的框. 解决办法有两种: 1)将已经安装的NX目录 ...

  10. OpenGL渲染时的数据流动

    OpenGL渲染时的数据流动 文件地址:https://wws.lanzous.com/i2aR3gu251e 链接失效记得回复哦!马上更新!