3. SQL底层执行原理详解

news2024/9/24 11:24:49

一条SQL在MySQL中是如何执行的

  • 1. MySQL的内部组件结构
    • 1.1 Server层
    • 1.2 Store层
  • 2. 连接器
  • 3. 分析器
    • 3.1 词法分析器原理
  • 4. 优化器
  • 5. 执行器
  • 6. bin-log归档

本文是按照自己的理解进行笔记总结,如有不正确的地方,还望大佬多多指点纠正,勿喷。

1. MySQL的内部组件结构

在这里插入图片描述
大体来说,MySQL可以分为Server层和存储引擎层两部分

1.1 Server层

主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。

1.2 Store层

MySQL的存储引擎采用的是插拔式的,我们可以自己扩充或者选择合适的。

存储引擎层负责数据的存储提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。也就是说如果我们在create table时不指定表的存储引擎类型,默认会给你设置存储引擎为InnoDB。

本次使用的DDL:

CREATE TABLE `test` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

下面我们重点来分析连接器、查询缓存、分析器、优化器、执行器分别主要干了哪些事情。

2. 连接器

我们知道由于MySQL是开源的,他有非常多种类的客户端:navicat,mysql front,jdbc,SQLyog等非常丰富的客户端,这些客户端要向mysql发起通信都必须先跟Server端建立通信连接,而建立连接的工作就是有连接器完成的。

第一步,你会先连接到这个数据库上,这时候接待你的就是连接器。连接器负责跟客户端建立连接、获取权限、维持和管理连接。连接命令一般是这么写的:

mysql ‐h host[数据库地址] ‐u root[用户] ‐p root[密码] ‐P 3306

连接命令中的 mysql 是客户端工具,用来跟服务端建立连接。在完成经典的 TCP 握手后,连接器就要开始认证你的身份,这个时候用的就是你输入的用户名和密码。

1、如果用户名或密码不对,你就会收到一个"Access denied for user"的错误,然后客户端程序结束执行。
2、如果用户名密码认证通过,连接器会到权限。

这就意味着,一个用户成功建立连接后,即使你用管理员账号对这个用户的权限做了修改,也不会影响已经存在连接的权限。修改完成后,只有新建的连接才会使用新的权限设置。用户的权限表在系统表空间的mysql的user表中。

mysql客户端和服务端是长连接,默认时间是8个小时。即8个小时内如果我们不做什么事情,连接依然会被保持。超过8个小时候,连接会断掉。

mysql本身维护着一个user表,来记录用户的权限。Host表示哪些主机可以连接,“%”表示任意主机都可以连接。

在这里插入图片描述

3. 分析器

3.1 词法分析器原理

4. 优化器

5. 执行器

6. bin-log归档

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

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

相关文章

基于ASP.NET的Web应用系统架构探讨

摘要:提出了一种基于ASP.NET开发方式的四层架构的Web应用系统构造思想。其基本内容是:将面向对象的UML建模与Web应用系统开发相结合,将整个系统分成适合ASP.NET开发方式的应用表示层、业务逻辑层、数据访问层和数据存储层四层结构…

[CF复盘] Codeforces Round 871 (Div. 4)20230506

[CF复盘] Codeforces Round 871 Div. 4 20230506 总结A. Love Story1. 题目描述2. 思路分析3. 代码实现 B. Blank Space1. 题目描述2. 思路分析3. 代码实现 C. Mr. Perfectly Fine1. 题目描述2. 思路分析3. 代码实现 D. Gold Rush1. 题目描述2. 思路分析3. 代码实现 E. The La…

UNeXt:基于 MLP 的快速医学图像分割网络

UNeXt是约翰霍普金斯大学在2022年发布的论文。它在早期阶段使用卷积,在潜在空间阶段使用 MLP。通过一个标记化的 MLP 块来标记和投影卷积特征,并使用 MLP 对表示进行建模。对输入通道进行移位,可以专注于学习局部依赖性。 UNeXt 基本架构 U…

考研数学高数1-1综合测试-函数及其性质

今天听完强化课之后去做学习包的题,发现没带平板,如果写到纸上,塞到书里又不知道去哪了,所以索性就拿Latex写了,虽然有一点麻烦,但是好在数量不多,就这么写吧。 都是我自己写的过程,…

第三十八章 Unity GUI系统(下)

上一章节我们将了UI的锚点,关于锚点我们只讲了一半,因为锚点并不只是一个点,它还可以是一个矩形。 我们可以将锚点拆开(鼠标选中后拖动),也就是将“四瓣雪花”拆成“四瓣”。那么此时锚点就成为一个矩形。我…

00-docker篇: linux系统安装docker操作 (最实用的操作)

目录 1. docker 简介 -> 简易理解: -> docker是否有自己仓库呢 -> docker 是靠什么运行呢 -> 简单说点docker优点 2. linux安装docker ps: 如果是新服务器 请直接看2. 3 -> 2.1: 查看内核版本: -> 2.2 如果有残留docker, 删除指令 -> 2.3 yu…

2023年全国职业院校技能大赛网络建设与运维-网络运维部分

全国职业院校技能大赛 网络建设与运维 五、网络运维 某单位网络拓扑架构如下,交换机连接两台服务器,其中Server1服务器是数字取证服务器,Server2服务器是应急响应服务器,通过交换设备相连,通过路由设备连接到安全设…

Portraiture4最新版滤镜P图一键磨皮插件

今天coco玛奇朵给大家带来了一款ps磨皮插件,超级简单好用。Portraiture 滤镜是一款 Photoshop,Lightroom 和 Aperture 插件,DobeLighttroom 的 Portraiture 消除了选择性掩蔽和逐像素处理的繁琐的手工劳动,以帮助您在肖像修整方面…

如何使用 ChatGPT 来快速编写产品需求文档(PRD)

PRD 生成 ChatGPT 即了解具体的编程知识,也了解编程之前的需求设计过程。因此产品经理也可以使用 ChatGPT 来快速编写PRD(产品需求文档, production requirement documentation)。 根据需求编写 PRD 首先,我们可以尝试把需求交给 ChatGPT,…

模型如何压缩?使用轻量化的模型压缩技术剪枝(pruning)

深度学习模型参数太多,本地服务器部署没有问题,但是如果部署到移动端、边缘端,像手机、树莓派等,它们的性能不能满足,所以我们要压缩模型大小,让他们可以部署到边缘端 模型压缩:使用轻量化的模型…

Redis 布隆过滤器总结

Redis 布隆过滤器总结 适用场景 大数据判断是否存在来实现去重:这就可以实现出上述的去重功能,如果你的服务器内存足够大的话,那么使用 HashMap 可能是一个不错的解决方案,理论上时间复杂度可以达到 O(1) 的级别,但是…

Flutter 开发的那些小细节

Flutter 创建应用的小注意 包名 每当创建一个新的 Flutter 应用时,一些 Flutter IDE 插件会请你输入一个类似 com.example 的包名,包名(在 iOS 里叫 Bundle ID)一般都是公司域名的反写。如果你的应用打算上架商店,建…

NetApp 7-mode下Autosupport日志的收集

前面介绍过NetApp Cluster mode下autosupport日志的收集方法,最近遇到很多7-mode下客户扔出一个有故障指示灯的照片,然后让你判断问题的case。NetApp没有一个命令能很清晰的把所有的和硬件有关的问题列出来的命令。客户随之就说,要不输入一条…

【操作系统OS】学习笔记第三章 内存管理【哈工大李治军老师】

基于本人观看学习 哈工大李治军老师主讲的操作系统课程 所做的笔记&#xff0c;仅进行交流分享。 特此鸣谢李治军老师&#xff0c;操作系统的神作&#xff01; 如果本篇笔记帮助到了你&#xff0c;还请点赞 关注 支持一下 ♡>&#x16966;<)!! 主页专栏有更多&#xff0…

《机器学习算法竞赛实战》-chapter6模型融合

模型融合 模型融合常常是竞赛取得胜利的关键&#xff01; 具有差异性的模型融合往往能给结果带来很大的提升。虽然并不是每次使用模型融合都能起到很大的作用&#xff0c;但是就平常的竞赛经验而言&#xff0c;尤其是在最终成绩相差不大的情况下&#xff0c;模型融合的方法往往…

法规标准-GB/T 39265标准解读(2020版)

GB/T 39265是做什么的&#xff1f; GB/T 39265全名为道路车辆 盲区检测系统性能要求及试验方法&#xff0c;其中主要是对BSD系统的性能要求及测试步骤进行了介绍。本文仅解读M1、N1类车辆相关内容。 一般要求 系统开启与关闭 1.BSD系统应具备手动开启和关闭的功能 2.手动关…

巧用 exports 和 typeVersions 提升 npm 包用户使用体验

默认导出 对于开发一个 JavaScript 三方库供外部使用而言&#xff0c;package.json是其中不可缺少的一部分 一般而言&#xff0c;对于库开发者来说&#xff0c;我们会在package.json中指定我们的导出入口。一般而言会涉及两个字段main和export&#xff0c;它们会涉及到当前模…

开关电源基础03:正激和反激开关电源拓扑(2)-半桥和全桥拓扑

说在开头&#xff1a;关于薛定谔的波动方程&#xff08;3&#xff09; 波动方程在矩阵派的内部也大受欢迎&#xff0c;首先是海森堡的老师索末菲&#xff0c;然后是建立矩阵力学的核心人物之一的另一位老师&#xff1a;马克思.玻恩。玻恩在薛定谔方程刚出来时就赞扬了他的成就…

宕机了?!DolphinScheduler 高可用和 Failover 机制关键时刻保命

点击蓝字 关注我们 高可用性是 Apache DolphinScheduler 的特性之一。它通过冗余来避免单点问题&#xff0c;所有组件天然支持横向扩容&#xff1b;但仅仅保证了冗余还不够&#xff0c;当系统中有节点宕机时&#xff0c;还需要有故障转移机制能够自动将宕机节点正在处理的工作转…

【react 全家桶】高级指引(上)

本人大二学生一枚&#xff0c;热爱前端&#xff0c;欢迎来交流学习哦&#xff0c;一起来学习吧。 <专栏推荐> &#x1f525;&#xff1a;js专栏 &#x1f525;&#xff1a;vue专栏 &#x1f525;&#xff1a;react专栏 文章目录 12 【react高级指引&#xff08;上&…