MySQL架构设计其实很简单

news/2024/4/24 20:47:02/

一、概述

我们很多互联网项目首选的数据库就是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 更多系统资源库…

GEE:计算两幅影像之间的RMSE(Root Mean Squared Error,均方根误差)以比较影像相似度

本文将介绍在GEE (Google Earth Engine) 平台中计算两幅影像均方根误差RMSE和均方误差MSE的代码。 RMSE(Root Mean Squared Error,均方根误差)是一种用于评估预测值或估计值与真实观测值之间误差的统计指标。它广泛应用于各种领域,包括地理信息系统(GIS)、遥感、气象学、…

leetcode142. 环形链表 II

给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数…

客流统计分析系统增强售楼处、4S店飞单管理能力

客流统计分析系统可以为售楼处和4S店提供有效的飞单管理能力,使其能够更好地管理客户信息和提高销售效率。首先,客流统计分析系统可以对售楼处和4S店的客流进行实时监控和分析。通过使用摄像头、人脸识别等技术,可以对进店的客户进行统计和分…

Linux: network: dummy 类型网络接口

文章目录 参考创建一个重要的用途是在container平台的应用dpdk相关的一个用途另一个用途ChatGPT的回复参考 https://tldp.org/LDP/nag/node72.html 这里举了一个例子,说为什么需要dummy类型的接口:就是一个类local loopback的一个接口,当应用需要给另一个本地的应用发送包的…

如何使用 GPT-4 为博客目录页打造炫酷前端效果

前不久我用 cmd markdown 写了篇文章《项目 TO 的自我修养》,文章的目录如下: 当我把它发布到线上后,目录却只展示出了二级标题: 这哪行!我猜这个可能就是加个配置啥的就能修复。于是马上就问 GPT-4 怎么办&#xff1f…

linux系统安装和配置网关

Linux 目前国内 Linux 更多的是应用于服务器上,而桌面操作系统更多使用的是 Windows 安装linux虚拟机 网址 VMware下载网址 点击Workstation 16 Pro for Windows下载 安装CentOS centO下载网址 依次点击 7.6.1810/ isos/ x86_64/ CentOS-7-x86_64…

前端技术的miniui 和bootstartp

前端技术的miniui 和bootstartp 目录概述需求: 设计思路实现思路分析1.前端技术boostatrp2.miniui: 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better re…

【4.18】贪心算法入门必刷题

文章目录 买卖股票的最佳时机 II跳跃游戏跳跃游戏 IIK 次取反后最大化的数组和 买卖股票的最佳时机 II 122. 买卖股票的最佳时机 II - 力扣(LeetCode) 解法一:动态规划 class Solution {public int maxProfit(int[] prices) {int n prices.l…

LEAP模型应用于工业、交通、建筑、电力、煤炭、炼油、经济、林业等各领域碳排放预测及建模分析

查看原文>>>LEAP软件(使用说明LEAP的模拟练习碳排放相关模板)IPCC收录的各种燃料CO2排放系数 目录 第一章 :LEAP建模理论基础 第二章:基于LEAP模型的能源需求预测模型构建 第三章:基于LEAP模型的能源供应…

【Paper Note】Swin Transformer: Hierarchical ViT using Shifted Windows

Swin Transformer: Hierarchical ViT using Shifted Windows 概述核心思想整体结构名词解释与vit区别 模型处理过程概括Patch EmbeddingBasicLayerPatch MergingSwin Transform BlockWindow AttentionShifted Window Attention小结 模型使用及代码模型使用环境配置SwinT 代码Pa…

Maven打包跳过测试的5种方式

Maven打包跳过测试的5种方式 1、命令行方式跳过测试 我们可以通过使用命令将项目打包,添加跳过测试的命令就可以了,可以用两种命令来跳过测试: -DskipTeststrue mvn package -DskipTeststrue-DskipTeststrue,不执行测试用例&a…

数据库实验 | 第2关:建立和调用存储过程(带输出参数)

任务描述 本关任务: 销售数据库有工作人员、销售单数据表 工作人员gzry数据表有雇员号gyh、姓名gyxm、出生日期csrq、学历xl、工资gz、部门bm、电话dh字段 销售单xsd数据表有销售单号xsdh、会员号hyh、雇员号gyh、销售日期xsrq、应付款yfk、实际付款sjfk字段 任…