玩转Mysql 四(MySQL逻辑架构与数据引擎)

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。

一、MySQL逻辑架构

1、从Oracle收购MySQL后,MySQL逻辑架构受Oracle影响,MySQL8版本中逻辑架构受Oracle的影响逐步完善查询缓存,Oracle中称为缓冲池(buffer pool)。(后续MySQL发展可能是低配版的Oracle)。

架构对比:MySQL VS Oracle

2、MySQL逻辑架构解析

第1层:连接层 Connectors

系统(客户端)访问 MySQL 服务器前,建立 TCP 连接。MySQL 服务器对 TCP 传输过来的账号密码做身份认证、权限获取。

用户名或密码不对,会收到一个Access denied for user错误,客户端程序结束执行。

用户名密码认证通过,会从权限表查出账号拥有的权限与连接关联,之后的权限判断逻辑,都将依
赖于此时读到的权限。

第2层:服务层

SQL Interface: (SQL接口)

接收用户的SQL命令,并且返回用户需要查询的结果。比如SELECT ... FROM就是调用SQL
Interface
MySQL支持DML(数据操作语言)、DDL(数据定义语言)、存储过程、视图、触发器、自定
义函数等多种SQL语言接口

Parser: 解析器:

在解析器中对 SQL 语句进行语法分析、语义分析。将SQL语句分解成数据结构,并将这个结构
传递到后续步骤,以后SQL语句的传递和处理就是基于这个结构的。如果在分解构成中遇到错
误,那么就说明这个SQL语句是不合理的。
在SQL命令传递到解析器的时候会被解析器验证和解析,并为其创建 语法树 ,并根据数据字
典丰富查询语法树,会验证该客户端是否具有执行该查询的权限 。创建好语法树后,MySQL还
会对SQl查询进行语法上的优化,进行查询重写。

Optimizer: 查询优化器:

SQL语句在语法解析之后、查询之前会使用查询优化器确定 SQL 语句的执行路径,生成一个
执行计划 。
这个执行计划表明应该 使用哪些索引 进行查询(全表检索还是使用索引检索),表之间的连
接顺序如何,最后会按照执行计划中的步骤调用存储引擎提供的方法来真正的执行查询,并将
查询结果返回给用户。
它使用“ 选取-投影-连接 ”策略进行查询。例如:
这个SELECT查询先根据WHERE语句进行 选取 ,而不是将表全部查询出来以后再进行gender过
滤。 这个SELECT查询先根据id和name进行属性 投影 ,而不是将属性全部取出以后再进行过
滤,将这两个查询条件 连接 起来生成最终查询结果。

Caches & Buffers: 查询缓存组件

MySQL内部维持着一些Cache和Buffer,比如Query Cache用来缓存一条SELECT语句的执行结
果,如果能够在其中找到对应的查询结果,那么就不必再进行查询解析、优化和执行的整个过
程了,直接将结果反馈给客户端。
这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等 。
这个查询缓存可以在 不同客户端之间共享 。
从MySQL 5.7.20开始,不推荐使用查询缓存,并在 MySQL 8.0中删除 。

不推荐使用查询缓存的原因:已经缓存的SQL下次执行必须是一模一样,如果有差异将回重新缓存。示例:

select * from test_tbs;

SELECT * FROM TEST_TBS;

两条语句执行出相同的结果,但对于缓存组件解析是两条不同的SQL。

第3层:引擎层

插件式存储引擎层( Storage Engines),真正的负责了MySQL中数据的存储和提取,对物理服务器级别维护的底层数据执行操作,服务器通过API与存储引擎进行通信。不同的存储引擎具有的功能不同,可以根据不同的数据库场景进行选择。

MySQL5/8版本默认使用的引擎是InnoDB,MySQL 8.版本支持的存储引擎列表:

第四层:存储层

所有的数据,数据库、表的定义,表的每一行的内容,索引,都是存在 文件系统 上,以 文件 的方式存在的,并完成与存储引擎的交互。商用环境中存储一般使用闪盘,提升数据库性能。

二、SQL执行流程

1 MySQL 中的 SQL执行流程

MySQL的查询流程:

查询缓存:Server 如果在查询缓存中发现了这条 SQL 语句,就会直接将结果返回给客户端;,因为查询缓存往往效率不高,所以在 MySQL8.0 删除了查询缓存。

解析器:在解析器中对 SQL 语句进行语法分析、语义分析。

MySQL线程用完,新连接无法连接解决-CSDN博客

SQL语句正确,则会生成一个这样的语法树:

 优化器:在优化器中会确定 SQL 语句的执行路径,根据全表检索 ,索引,执行计划等提高SQL执行效率,在查询优化器中,可以分为 逻辑查询 优化阶段和 物理查询 优化阶段。

 执行器:

SQL 语句在 MySQL 中的流程是: SQL语句→查询缓存→解析器→优化器→执行器 。

 三、MySQL-SQL执行原理

1、MySQL5.7中SQL执行原理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/602590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构:树详解

创建二叉树 给出了完整的先序遍历序列,子树为空用’#’表示,所以这样我们在通过先序遍历序列创建二叉树时我们直到先序遍历序列是先进行根结点,然后左子树最后右子树的顺序进行遍历的,所以对于完整的先序遍历序列我们可以直到先序…

VS code的使用介绍

VS code的使用介绍 简介下载和安装常用的插件使用教程快捷键 集成Git未找到 Git。请安装 Git,或在 "git.path" 设置中配置。操作步骤打开文件夹初始化仓库文件版本控制状态提交文件到git打开git操作栏位 好用的插件ChineseDraw.io Integration实体关系 Gi…

Windows电脑无法睡眠解决办法

原因 电脑无法休眠的原因,是打开离开模式策略后,windows内核会持续调用CPU资源,导致系统一直在运行而无法关闭。关闭后就好了。 解决步骤 修改注册表 操作步骤如下: 按winR,输入regedit,打开注册表编辑页面。输入如下…

YOLOv5+混合注意力机制再涨4.3%,Transformer混合设计依旧可以卷

在工业生产过程中,由于低效率、不统一的评估、高成本以及缺乏实时数据,传统的手动检测焊接缺陷不再被应用。 为了解决表面贴装技术中焊接缺陷检测的低准确率、高误检率和计算成本问题,提出了一种新方法。该方法是一种专门针对焊接缺陷检测算法…

STM32入门教程-2023版【3-2】STM32如何使用库函数及几种方法

关注 点赞 不错过精彩内容 大家好,我是硬核王同学,最近在做免费的嵌入式知识分享,帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作! 五、库函数的使用方法 (1)第一种 想使用库函数,可以先打开.h文件&…

Nginx快速入门:worker、master进程的作用和热部署原理(十)

0. 引言 我们通过查询nginx进程,可以发现nginx有两个进程:worker和master。一个程序启动了两个进程,那么这两个进程的作用和区别是什么呢?nginx又是如何利用这两个进程进行工作的呢?nginx不停机热部署又是如何实现的&…

12月笔记

#pragma once 防止多次引用头文件,保证同一个(物理意义上)文件被多次包含,内容相同的两个文件同样会被包含。 头文件.h与无.h的文件: iostream是C的头文件,iostream.h是C的头文件,即标准的C头文…

一个H3C交换机周期性断网并自动恢复的排查案例

一个朋友发我一个H3C日志,这个交换机是汇聚层交换机,1和2口是trunk口,其它接口是access接口,17-21口据说接的都是监控、终端。日志里面看到大量的拓朴改变,好几个网口up、down的日志,怀疑是环路&#xff0c…

Linux操作系统基础 – 管理目录

Linux操作系统基础 – 管理目录 Linux Essentials – Manage Directories By JacksonML 本文简要介绍在Linux系统中如何管理目录的方法及实例,希望对您有所帮助。 1. Linux目录 一个目录,是一个存储文件名及相关信息的单独工作的文件。所有的文件&am…

SpringBoot学习(七)-SpringBoot集成Swagger

集成Swagger终极版 学习目标: 了解Swagger的概念及作用掌握在项目中集成Swagger自动生成API文档 Swagger简介 前后端分离 前端 -> 前端控制层、视图层后端 -> 后端控制层、服务层、数据访问层前后端通过API进行交互前后端相对独立且松耦合 产生的问题 前…

Qt——TCP UDP网络编程

目录 前言正文一、TCP二、UDP1、基本流程2、必备知识 三、代码层级1、UDP服务端 END、总结的知识与问题1、如何获取QByteArray中某一字节的数据,并将其转为十进制?2、如何以本年本月本日为基础,获取时间戳,而不以1970为基础&#…

Docker-Compose部署Redis(v7.2)分片集群(含主从)

文章目录 一、前提准备1. 文件夹结构 二、配置文件1. redis.conf2. docker-compose文件 三、构建集群1. 自动分配主从关系2.1 构建3 master集群2.2 手动配置从节点 四、测试1. 集群结构2. 分片测试 环境 docker desktop for windows 4.23.0redis 7.2 目标 搭建如下图分片主从…

基于Kettle开发的web版数据集成开源工具(data-integration)-应用篇

目录 📚第一章 基本流程梳理📗页面基本操作📗对应后台服务流程 📚第二章 二开思路📗前端📗后端📗后续补充:[Kettle Local引擎源码使用记录](https://renxiaozhao.blog.csdn.net/arti…

简单工厂模式、工厂方法、抽象工厂模式

下面例子中鼠标,键盘,耳麦为产品,惠普,戴尔为工厂。 简单工厂模式 简单工厂模式不是 23 种里的一种,简而言之,就是有一个专门生产某个产品的类。 比如下图中的鼠标工厂,专业生产鼠标&#xf…

STM32 JLINK SWD调试器手动复位才能烧写的问题

STM32 JLINK SWD调试器手动复位才能烧写的问题 Chapter1 STM32 JLINK SWD调试器手动复位才能烧写的问题 Chapter1 STM32 JLINK SWD调试器手动复位才能烧写的问题 原文链接:https://blog.csdn.net/denghuajing/article/details/121649667 问题 只有手动复位的情况下…

B059-权限管理系统01

目录 知识点介绍项目演示项目搭建动态菜单查询分析(权限表分析)权限系统表分析角色模块pageInfopageHelper实现前端动态分页高级查询新增与修改删除角色 分配权限-表分析角色授权数据-一级和二级权限查询 知识点介绍 项目演示 准备数据库 准备工程auth_new tips:…

解决“SQLServer 添加数据库,报Error 5118“错误

当将把一个SQLServer的数据库文件*.MDF和日志文件*.LDF,从电脑A拷贝到电脑B,然后在电脑B上,使用Microsoft SQL Server Management Studio添加该*.MDF文件,有时报"Error 5118"错误,如图(1)所示: 图…

mysql视图和sql语句

mysql视图和sql语句 一.mysql视图1.数据的虚拟表示:2.简化复杂查询:3.安全性和权限控制:4.逻辑数据组织:5.更新限制:6.视图的创建: 二.mysq语句使用案列 MySQL的视图(View)是一个虚拟…

Docker安装WebRTC下TURN服务

详细实现方式以及代码下载请前往 https://www.passerma.com/article/90 实现效果 一、手动构建镜像 1.新建Dockerfile文件 文件用于编译镜像 以alpine为基础镜像 添加coturn需要的依赖库 获取coturn并进行编译 通过start.sh启动turnserver服务 Dockerfile FROM alpineRUN ap…

HarmonyOS 开发基础(六)Slider

HarmonyOS 开发基础(六)Slider Entry Component struct Index {build() {Row() {Column() {// Slider:ArkUI 的基础组件 滑动条组件// options 参数:Slider 基础设置Slider({// 最小值min: 20,// 最大值max: 200,// 当前值value: …