MySQL之架构简单分析

上图为MySQL的简易架构图,给您有一个大概的概念,下面我将为您进行进一步的分析。
连接器:
当连接MySQL数据库时,等待的将是MySQL服务端的连接器;连接器的职责是和客户端建立连接、获取权限、维持和管理连接。客户端连接命令一般是如下所示(建议:不要在命令中显示添加登入密码):
mysql -h$ip -p$port -u$user -p$password
查询缓存:
建立完连接后,就可执行select语句。执行就会走向查询缓存。
MySQL拿到这个查询请求后,就会先到缓存中看看,之前是不是执行了该语句。在查询缓存中数据是以key-value形式存在的,key为执行的查询请求,value为查询结果。如果执行了就直接从缓存中把结果返回给客户端,请求结束。如果语句不在缓存中,就执行后续复杂操作。
在大多数情况下不建议使用查询缓存,为什么呢?因为查询缓存往往弊大于利。
查询缓存的失效非常频繁,只要对表进行了更新,该表的中查询缓存全部清除。所以往往很多时候,缓存还没使用就被清除了。对于更新压力很大的数据库来说,查询缓存的命中率很低。如果你的业务中存在一张静态表,很长时间才会更新一次。比如,系统配置表,那这张表的查询才适合查询缓存。
该功能是自动配置的。可以将参数 query_cache_type 设置成 DEMAND ,这样对于默认的SQL语句就不会使用查询缓存。而对于确定的查询语句,可以使用 SQL_CACHE 显示指定,比如如下语句:
select SQL_CACHE * from t where id = 1;
注意:在MySQL8.0之后的版本,把查询缓存模块移除了。
分析器
在没有命中查询缓存后,MySQL开始真正执行语句了。这时MySQL对该语句进行解析。
分析器首先进行词法分析,一条sql由多个字符串和空格组成,MySQL需要分析出这些字符串是什么,代表什么。
做完识别之后,进行语法分析。根据词法分析的结果,语法分析器会根据语法规则对sql语句进行分析,是否符合MySQL的语法规则。
优化器
执行完分析器后,MySQL就知道该sql语句要干什么了。在开始执行之前,要经过优化器的处理。
优化器在表里存在多个索引时,选择执行哪个索引;或者一个语句有多表关联时(join),选择各表的连接顺序。
执行器
MySQL通过分析器知道了该语句要做什么,通过优化器知道该怎么做,于是进入到了执行器阶段,开始执行语句。
开始执行之前,首先会判断用户是否有对表的执行权限(如果是在查询缓存得到结果,会在返回结果之前进行权限校验),如果没有会报错.。如果有权限,就打开表继续执行语句。打开表的时候,执行器会根据表的引擎定义,去使用引擎提供的接口。
存储引擎
MySQL区别于其他数据的最具有点的是存储引擎接口模块,MySQL可进行插拔存储引擎。
MySQL的存储引擎有很多种,比如:InnoDB、MyISAM、ISAM、Memory等。在MySQL5.6之前,默认存储引擎是MyISAM,而在该版本之后默认的是InnoDB。下表是两者之前的区别:
| InnoDB |
MyISAM |
|
| 存储文件 |
.frm 表定义文件,.ibd 数据文件和索引文件 |
.frm 表定义文件,.myd 数据文件, .myi 索引文件 |
| 锁 | 表锁、行锁 | 表锁 |
| 事务 | 支持 | 不支持 |
| CRUD | 读、写 | 读多 |
| count | 扫表 | 专门存储的地方 |
| 索引结构 | B+树 | B+树 |
近期在学习MySQL数据库, 后续将会持续更新学习随笔。
MySQL之架构简单分析的更多相关文章
- Java高可用集群架构与微服务架构简单分析
序 可能大部分读者都在想,为什么在这以 dubbo.spring cloud 为代表的微服务时代,我要还要整理这种已经"过时"高可用集群架构? 本人工作上大部分团队都是7-15人编 ...
- MySQL基础架构分析
文章已托管到GitHub,大家可以去GitHub查看阅读,欢迎老板们前来Star! 搜索关注微信公众号 码出Offer 领取各种学习资料! MySQL基础架构 一.引言 我们在学习MySQL的时候,迈 ...
- MySQL逻辑架构概述
1.MySQL逻辑架构 MySQL逻辑架构图 MySQL逻辑架构分四层 1.连接层:主要完成一些类似连接处理,授权认证及相关的安全方案. 2.服务层:在 MySQL据库系统处理底层数据之前的所有工作都 ...
- MySQL监控、性能分析——工具篇
https://blog.csdn.net/leamonjxl/article/details/6431444 MySQL越来越被更多企业接受,随着企业发展,MySQL存储数据日益膨胀,MySQL的性 ...
- MySQL监控、性能分析——工具篇(转载)
MySQL越来越被更多企业接受,随着企业发展,MySQL存储数据日益膨胀,MySQL的性能分析.监控预警.容量扩展议题越来越多.“工欲善其事,必先利其器”,那么我们如何在进行MySQL性能分析.监控预 ...
- MySQL之架构与历史(一)
MySQL架构与历史 和其他数据库系统相比,MySQL有点与众不同,它的架构可以在多种不同的场景中应用并发挥好的作用,但同时也会带来一点选择上的困难.MySQL并不完美,却足够灵活,它的灵活性体现在很 ...
- 洞悉MySQL底层架构:游走在缓冲与磁盘之间
提起MySQL,其实网上已经有一大把教程了,为什么我还要写这篇文章呢,大概是因为网上很多网站都是比较零散,而且描述不够直观,不能系统对MySQL相关知识有一个系统的学习,导致不能形成知识体系.为此我撰 ...
- 精通MySQL之架构篇
老刘是即将找工作的研究生,自学大数据开发,一路走来,感慨颇深,网上大数据的资料良莠不齐,于是想写一份详细的大数据开发指南.这份指南把大数据的[基础知识][框架分析][源码理解]都用自己的话描述出来,让 ...
- MySQL提升笔记(1):MySQL逻辑架构
深入学习MySQL,从概览MySQL逻辑架构开始. 首先来看一下MySQL的逻辑架构图: MySQL逻辑架构大概可以分为三层: 客户端:最上层的服务并不是MySQL所独有的,大多数基于网络的客户端/服 ...
随机推荐
- 如何判断一个变量是否为数组(isArray)
在我们平时的工作中经常会用到如何判断一个变量是否为数组.常用的方法很多,有用常用框架里面的,isArray.但是关于这个isArray的实现,各有不同. 常用的方法有如下几种 1.instanceof ...
- GO语言编译环境采用gosublime(19新版)
环境:博主已下载好,并安装在E:/SDK,使用过sublime text3,有git 0x00 环境变量 默认已经有GOPATH(代码存放在这),PATH(安装go的bin目录即E:\SDK\bin) ...
- HTML 表单模板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 速查TARGET_OS关系/Apple xcode 宏定义
记法 : 次级等于上级 TARGET_OS_WIN32 - Generated code will run under 32-bit Windows TARGET_OS_UNIX - Generate ...
- sql server一些快捷方式和操作技巧
1.注释(ctrl+k+c) 和 取消注释(ctrl+k+u) 2.行号显示,如图:
- oracle 根据时间戳查询date类型sql
话不多说上sql: select to_char(1574837126879/(1000*60*60*24)+to_date('1970-01-01 08:00:00','YYYY-MM-DD HH2 ...
- Linux各目录的意义
目录层次表准FHS FHS(Filesystem Hierarchy standard) FHS定义两层规范:1.“/”目录下的各个目录应该放什么文件数据 2.针对/usr /var两个目录的子目录来 ...
- springioc之依赖注入
1.1.2 IoC能做什么 IoC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合.更优良的程序.传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类 ...
- nginx基础(3)
目录 HTTP首部 1.通用首部 2.请求首部 2.1 必有首部 2.2 条件请求首部 2.3 安全相关首部 3.响应首部 3.1 必有首部 3.2 协商首部 3.3 安全相关首部 4.实体首部 4. ...
- java对 zip文件的压缩和解压(ant解决中文乱码)
说明: 1.对于压缩的文件,当文件名称是中文时,若使用JDK API中自带的类(java.util.zip.ZipEntry; java.util.zip.ZipOutputStream;)进行压缩, ...