【大白话系列】MySQL 学习总结 之 初步了解 MySQL 的架构设计
一、MySQL还是个黑盒子
我们都知道,只要我们系统引入了 MySQL 驱动和连接池,就能从数据库连接池获取一个数据库连接,然后就可以执行增删改查的操作了。
可是我们并不知道 MySQL 里面是怎么执行的,例如我们执行了 insert 语句,只知道表里面多了一条数据,MySQL 是怎么插入的我们就不知道了。
二、解开 MySQL 这个黑盒子
1、一条工作线程:
举例:
我们都知道,在 Socket 编程里,ServerSocket 会有一条线程负责监听 Socket 发送过来的网络请求,并且负责从网络请求里读取请求数据,然后再进行处理 。
原理:
那么在 MySQL 里也是一样的道理,会有一条工作线程
专门去监听 MySQL 数据库连接池里的网络请求,并且负责将请求中的 SQL 读取出来。
2、 SQL 接口:
上面说到 MySQL 的工作线程会从网络连接中读取 SQL。但是接下来是由谁继续执行呢?
举例:
我们可以想象一下,在我们的 Web 系统里头,Tomcat 这个进程会接收客户端的网络请求,然后经过转发交给我们写的接口执行。
举例:
在 MySQL 里其实也一样,MySQL 就是一个数据库管理系统,上面提及到的工作线程会接收各个客户端的网络请求,然后经过转发交给内部的接口执行。
而这里的内部接口,叫 SQL 接口
,它是 MySQL 内部里的一个组件。它是一套执行 SQL 语句的接口,专门执行我们的那些增删改查的 SQL 语句。
3、查询解析器:
举例:
我们都知道,现在的计算机其实都不懂得我们输入的命令,它只懂最后的 接收到的0/1信号。
举例:
MySQL 也一样,虽然我们按照一定的 SQL 语法写出了 SQL,但是 MySQL 却不能直接读懂这个 SQL 语句,并且因为 MySQL 的数据最后是存放在磁盘文件中的,所以需要先解析 SQL 语句,才知道怎么从磁盘文件中读取数据、修改数据、新增数据或者是删除数据。
这时候,查询解析器
就来了,它会专门对 SQL 语句按照一定的规则进行解析,然后让 MySQL 理解这个 SQL 语句是要干啥的。
4、查询优化器:
举例:
相信大家都听过这么一句话:条条大道通罗马,但是肯定有的路近,有的路远。
举例:
而 MySQL 执行 SQL 一样,也有很多种执行方法可以得到一样的结果,但是必定有的方法执行效率高,有的方法执行效率低。
这个时候,查询优化器
就来了,它会为 SQL 制定一套最优的执行计划。
5、执行器:
上面提到了最优的执行计划,那么计划必须有人的去执行,才能得到我们写的 SQL 的结果。
这时候,MySQL 里的执行器
会按照查询优化器生成的一套最优执行计划,一步一步的执行下去,知道完成这个计划为止。
6、存储引擎:
其实到了最后,真正操作数据库数据的是 MySQL 里的存储引擎
。上面的执行器会根据执行计划去不断调用存储引擎的接口来完成执行计划。
【大白话系列】MySQL 学习总结 之 初步了解 MySQL 的架构设计的更多相关文章
- 【大白话系列】MySQL 学习总结 之 初步了解 MySQL Server 的 binlog 组件
一.上节回顾 上节我们讲到,建议将 redo log 的刷盘策略设置为1:即提交事务时,强制将 redo log buffer 里的 redo log 刷入到磁盘后才算事务提交成功. 但是我们都知道, ...
- MySQL学习之路(一)——初涉MySQL。
MySQL学习之路(一) 1.1MySQL的概述 MySQL由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一个开源的关系型数据库管理系统. MySQL分为社区版和企业版. 1 ...
- mysql学习-windows下绿色版mysql安装问题解决办法
1.下载绿色版mysql 从该地址http://dev.mysql.com/downloads/mysql/ 中选择windows的版本,选择下载. 2.将下载的压缩包解压. 3.将根目录下的my-d ...
- mysql学习笔记(七)—— MySQL内连接和外连接
MySQL内连接(inner join on) MySQL的内连接使用inner join on,它的效果跟使用where是一样的,如果联结的是两个表,那么需要左右的条件或者说字段是需要完全匹 ...
- Mysql学习总结(34)——Mysql 彻底解决中文乱码的问题
mysql 中常常出现对中文支持不友好的情况 常见的错误 "Illegal mix of collations for operation" 下面我们规整一下 mysql 数据库中 ...
- MySQL学习(一)——启动和登录MySql遇到的问题及解决
1.MySQL使用命令行启动时报错“发生系统错误 5”,如下: 原因:未用管理员身份运行cmd程序 解决方案:在开始菜单里找到命令提示符,右击选择以管理员身份运行 2.登录时报错“提示mysql不是内 ...
- Mysql学习总结(21)——MySQL数据库常见面试题
1. 如何使用SELECT语句找到你正在运行的服务器的版本并打印出当前数据库的名称? 答:下面的语句的结果会显示服务器的版本和当前的数据库名称 mysql> SELECT VERSION(), ...
- Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
1.基础知识 1.1.数据库概述 简单地说:数据库(Database或DB)是存储.管理数据的容器: 严格地说:数据库是"按照某种数据结构对数据进行组织.存储和管理的容器". 总结 ...
- Mysql学习总结(2)——Mysql超详细Window安装教程
目录 一.安装包准备 二.开始安装 三.验证安装 四.客户端工具 一.安装包准备 1.下载MySql5.6 http://www.mysql.com/ 下载如下教程,这时要选MySql On Wind ...
随机推荐
- zabbix安装完成后查看编译参数
最近学习zabbix分布式监控系统,突然想如何查看自己编译时的参数,最终找到自己想要的结果. 1.首先进入zabbix源码目录 2.用ls -l命令查看是否有一个叫config.log文件 3.这个文 ...
- 计算机专业如何高质量的走完大学四年?毕业成为Offer收割机
前言:迷茫本就是青春该有的模样,但不要让未来的你讨厌现在的自己. "就要毕业了. 回头看自己所谓的大学生活, 我想哭,不是因为离别,而是因为什么都没学到. 我不知,简历该怎么写,若是以往我会 ...
- $[TJOI2017]$ 可乐 矩阵优化$dp$
\(Sol\) 设\(f_i\)为到第\(i\)秒的方案数,显然\(f_i=\)在第\(i\)秒前爆炸的方案数+在第\(i\)秒爆炸的方案数+在第\(i\)秒停下的方案数+在第\(i\)秒走向下一个城 ...
- 对 Redux 一头雾水?看完这篇就懂了
首先,学习 Redux 可能会很困难 当你终于学会了如何使用 React,也有了自己去构建一些应用的信心,那会是一种非常棒的感觉.你学会了管理状态,一切看起来井井有条.但是,很有可能这就到了你该学习 ...
- docker练习-堆栈
介绍 分布式应用程序层次结构的顶部:堆栈. 堆栈是一组相互关联的服务,它们共享依赖关系,并且可以协调和缩放在一起. 单个堆栈能够定义和协调整个应用程序的功能(尽管非常复杂的应用程序可能希望使用多个堆栈 ...
- 【记】Linux下安装JDK1.7
Java官网已经不提供除最新版本以外版本的JDK下载了,下载JDK1.7,密码: rsqg 本地Linux系统为Centos6.9,本身就没安装Java:已安装Java需要先卸载,卸载方法请百度. 1 ...
- 体验.NET Core 命令行应用程序-CommandLineUtils
前言 在我们开发中可能需要设计一次性应用程序,这些实用程序可以利用接近原始源代码的优势,但可以在与主Web应用程序完全独立的安全性上下文中启动.具体在 [管理过程](https://12factor. ...
- 机器学习——Java调用sklearn生成好的Logistic模型进行鸢尾花的预测
机器学习是python语言的长处,而Java在web开发方面更具有优势,如何通过java来调用python中训练好的模型进行在线的预测呢?在java语言中去调用python构建好的模型主要有三种方法: ...
- python集合的运算
& 交集 | 并集 - 差集 ^ 异或集 # 在对集合做运算时,不会影响原来的集合,而是返回一个运算结果 # 创建两个集合 s = {1,2,3,4,5} s2 = {3,4,5, ...
- cogs 1440. [NOIP2013]积木大赛 贪心水题
1440. [NOIP2013]积木大赛 ★★ 输入文件:BlockNOIP2013.in 输出文件:BlockNOIP2013.out 简单对比时间限制:1 s 内存限制:128 M ...