MySQL架构设计其实很简单

news/2024/12/31 6:21:22/

一、概述

我们很多互联网项目首选的数据库就是MySql5.7,因为免费,支持数据库主从复制,读写分离,且语法简单,容易上手,虽然对sql的函数、触发器、存储过程有一定的了解,也能说出一些优化sql语句的方法,但这些只能说是对MySql的浅薄了解。

在当今这个社会,竞争异常的激烈,如果还只停留在表面的CRUD,那么是没有任何优势的,像现在的MySQL面试题,你能答出来吗?

说说MySQL中MVCC机制的原理?
MySQL的事务原理和实现?
MySQL数据主从复制的原理?
MySQL底层数据的存储结构?
如何使MySQL支持海量数据存储?
MySQL中的锁机制原理和实现?
MySQL索引机制?索引中涉及的数据结构和算法?
MySQL为何使用B+树作为索引结构?
B+树可以存放多少数据?
说说MySQL中间隙锁的实现原理?
InnoDB引擎为何会崩溃?说说其实现原理?
等等其他一系列高频面试

所以我们想对MySql有一个深入彻底的了解,就必须了解它的底层架构是怎么实现的。

今天就由我带领大家一块学习MySQL分层架构,深入了解MySQL底层实现原理、以及每层的作用,我们常见的Sql优化是在哪些层实现了优化。

二、架构详解

1、MySql的整体架构,如下图

在这里插入图片描述

  • 由图中我们可以看到数据库架构主要由Service层和存储引擎层。
  • Service层又分为连接器、分析器、优化器、执行器及缓存。所有跨存储引擎的功能都在这一层实现,如:函数、存储过程、触发器、视图等。
  • 存储引擎是可插拔式的,目前主要的存储引擎有MyISAM、InnoDB、Memory等,MySQL5.5之前默认是MyISAM、之后是InnoDB。

2、连接器

  • 连接器的主要作用是用来管理客户端的连接及身份认证。
  • 客户端与Server端的连接采用的是TCP协议,经过三次握手,建立连接之后,连接器开始进行身份验证。
  • 身份验证的代码

mysql -hlocalhost -P3306 -uroot -p

如果身份验证失败就会出现错误

ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)。

在这里,我们可以使用show processlist命令查看系统所有的连接信息
在这里插入图片描述

在上图中Command表示连接状态,Daemon表示后天进程,Query表示查询,Sleep表示看下连接。

3. 查询缓存

  • 可以端查询数据不会直接去使用存储引擎查询数据,而是先在缓存查询数据是否存在。如果存在,直接返回,否则再执行一遍查询流程,查询结束后再把结果缓存起来,这样可以大大提高查询效率。

  • 如果数据发生更改,将清空缓存,如执行update、insert、delete、alter等操作。

  • 对于频繁更改的数据,缓存的命中率很低,使用缓存反而降低了读写性能,所以在MySQL8.0后就移除了缓存模块。

  • 可以通过下面的命令查看缓存是否开启

show variables like ‘%query_cache%’;

在这里插入图片描述

4、分析器

  • 主要对MySQL的词法和语法进行分析。
  • 首先进行词法分析,分析出MySQL的关键字、以及每个词语代表的含义。然后进行语法分析,是否遵循MySQL的要求。
  • MySQL识别语句中的列名、表名、select、update、insert、where等MySQL关键字,再根据语法规则判断sql语句是否符合满足语法,最终生成一个抽象的语法数(AST)。
  • 比如:sql语句中少写个where关键字,就会提示错误。
mysql> use shop;
mysql> select * from sys_user id = 1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= 1' at line 1

5. 优化器

  • 在真正执行sql语句之前,还要经过优化器进行处理。
  • 例如我们熟悉的执行计划 Explain 就是优化器生成的。
  • 优化器主要有两个作用:逻辑优化和物理优化。

1、逻辑优化主要进行等价微词重写、条件化简、子查询消除、连接消除、语义优化、分组合并、选择下推、索引优化查询、表查询替换视图查询、Union替换or操作等。
2、物理优化主要通过贪婪算法,根据代价估值模型,估算出每种执行方式的代价。并使用索引优化表连接,最终生成查询执行计划。

如下图就是优化的详细过程:
在这里插入图片描述
如果想知道优化器估算结果信息,可以通过Explain查看,如:

mysql> explain select * from sys_user where id = 1;

6. 执行器

在优化器对sql语句的优化完成,并生成了执行计划后, 就会把执行计划传递给执行器。
执行器调用存储引擎接口,真正的执行查询。获取到存储引擎返回的结果,并把结果返回给客户端,至此查询语句结束。

7、整个查询过程,如图:

在这里插入图片描述

8、总结

本文主要对MySQL的底层架构进行了简单的介绍,同时对每层架构的作用都做了详细的说明。从中我们可以看出MySQL每层架构分工明确、逻辑清晰、深刻体现了架构设计中“高内聚、低耦合”的设计思想。我们平时在架构设计的时候,也要多学习这种分层的架构设计思想。


http://www.ppmy.cn/news/48504.html

相关文章

数据库基础篇 《8. 聚合函数》

目录 1. 聚合函数介绍 1.1 AVG和SUM函数 1.2 MIN和MAX函数 1.3 COUNT函数 2. GROUP BY 2.1 基本使用 2.2 使用多个列分组 2.3 GROUP BY中使用WITH ROLLUP 3. HAVING 3.1 基本使用 3.2 WHERE和HAVING的对比 4. SELECT的执行过程 4.1 查询的结构 4.2 SELECT执行顺…

qt中信号和槽机制

文章目录 信号与槽机制实现 点击按钮 关闭窗口的案例 自定义信号槽自定义信号自定义槽函数触发自定义的信号案例:请老师吃饭 断开信号当槽函数遇到重载的时候拓展 信号与槽机制 connect(信号的发送者, 发送的具体信号,信号的接受者&#xff0…

【移动端网页布局】移动端网页布局基础概念 ④ ( 物理像素 | 物理像素比 | 代码示例 - 100 像素在 PC浏览器 / 移动端浏览器 显示效果 )

文章目录 一、物理像素 / 物理像素比二、代码示例 - 100 像素在 PC浏览器 / 移动端浏览器 显示效果 一、物理像素 / 物理像素比 移动端 网页开发 与 PC 端开发有很多不同之处 , 在图片处理方向需要采用 二倍图 / 三倍图 / 多倍图 方式进行图片处理 ; 图片处理的方式与如下的 物…

基于html+css的图片展示15

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

数据库系统-索引

一、什么是索引 字典中的目录,就是生活中的索引 **索引:**定义在存储表基Table础之上,有助于无需检查所有记录而快速定位所需记录的一种辅助存储结构,由一些列存储在磁盘上的索引项index etries组成,每一个索引项又由…

2023年最强手机远程控制横测:ToDesk、向日葵、Airdroid三款APP免Root版本

前言 随着远程办公和远程协作的日益普及,跨设备、系统互通的远程控制软件已经成为职场人士不可或缺的工具之一。在国内,向日葵和ToDesk是最著名的远程控制软件;而在国外,则有微软远程桌面、AirDroid、TeamViewer、AnyDesk、Parse…

Nginx安装

版本区别 常用版本分为四大阵营 Nginx开源版 http://nginx.org/Nginx plus 商业版 https://www.nginx.comopenresty http://openresty.org/cn/Tengine http://tengine.taobao.org/ 安装步骤 上传nginx压缩包到指定目录 /usr/local/nginx 解压缩 tar zxvf nginx-1.21.6.t…

图书馆管理系统【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设!!! 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址:https://download.csdn.net/download/qq_50954361/87682509 更多系统资源库…