《MySQL 实战 45 讲》课程学习笔记(一)

基础架构:一条 SQL 查询语句是如何执行的?

MySQL 的基本架构

在这里插入图片描述

  • MySQL 可以分为 Server 层和存储引擎层两部分。
    • Server 层
      • 包括连接器、查询缓存、分析器、优化器、执行器;
      • 涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等);
      • 所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
    • 存储引擎层
      • 负责数据的存储和提取;
      • 其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎;
      • 现在最常用的存储引擎是 InnoDB;
      • 不同的存储引擎共用一个 Server 层,也就是从连接器到执行器的部分。

连接器

  • 第一步,你会先连接到这个数据库上,这时候接待你的就是连接器。
    • 连接器负责跟客户端建立连接、获取权限、维持和管理连接。
    • 连接命令:mysql -h$ip -P$port -u$user -p
      • 输完命令之后,你就需要在交互对话里面输入密码。
      • 如果用户名密码认证通过,连接器会到权限表里面查出你拥有的权限。
      • 一个用户成功建立连接后,即使你用管理员账号对这个用户的权限做了修改,也不会影响已经存在连接的权限。
    • 连接完成后,如果你没有后续的动作,这个连接就处于空闲状态,你可以在 show processlist 命令中看到它。
    • 客户端如果太长时间没动静,连接器就会自动将它断开。这个时间是由参数 wait_timeout 控制的,默认值是 8 小时。
      • 数据库里面,长连接是指连接成功后,如果客户端持续有请求,则一直使用同一个连接。
      • 短连接则是指每次执行完很少的几次查询就断开连接,下次查询再重新建立一个。
      • 如果长连接累积下来,可能导致内存占用太大,被系统强行杀掉(OOM),从现象看就是 MySQL 异常重启了。

查询缓存

  • 连接建立完成后,你就可以执行 select 语句了。执行逻辑就会来到第二步:查询缓存。
    • MySQL 拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。
    • 之前执行过的语句及其结果可能会以 key-value 对的形式,被直接缓存在内存中。
      • key 是查询的语句,value 是查询的结果。
      • 如果你的查询能够直接在这个缓存中找到 key,那么这个 value 就会被直接返回给客户端。
      • 如果语句不在查询缓存中,就会继续后面的执行阶段。
    • 执行完成后,执行结果会被存入查询缓存中。
  • 大多数情况下建议你不要使用查询缓存,查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。MySQL 8.0 版本直接将查询缓存的整块功能删掉了。

分析器

  • 分析器先会做“词法分析”。
    • 你输入的是由多个字符串和空格组成的一条 SQL 语句,MySQL 需要识别出里面的字符串分别是什么,代表什么。
  • 做完了这些识别以后,就要做“语法分析”。
    • 根据词法分析的结果,语法分析器会根据语法规则,判断你输入的这个 SQL 语句是否满足 MySQL 语法。

      一般语法错误会提示第一个出现错误的位置。

优化器

  • 经过了分析器,MySQL 就知道你要做什么了。
  • 在开始执行之前,还要先经过优化器的处理。
    • 优化器是在表里面有多个索引的时候,决定使用哪个索引;
    • 或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。
  • 优化器阶段完成后,这个语句的执行方案就确定下来了,然后进入执行器阶段。

执行器

  • MySQL 通过分析器知道了你要做什么,通过优化器知道了该怎么做,于是就进入了执行器阶段,开始执行语句。
    • 开始执行的时候,要先判断一下你对这个表 T 有没有执行查询的权限,如果没有,就会返回没有权限的错误。
    • 如果有权限,就打开表继续执行。
    • 打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。
    • 数据库的慢查询日志中有一个 rows_examined 的字段,表示这个语句执行过程中扫描了多少行。
    • 在有些场景下,执行器调用一次,在引擎内部则扫描了多行,因此引擎扫描行数跟 rows_examined 并不是完全相同的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华为数通HCIP-VPN技术-mpls vpn

VPN(虚拟专线网络) 作用:实现广域互联(不同地域局域网之间跨越公网进行互通); VPN(Virtual Private Network,虚拟专用网络)指的是在一个公共网络中实现虚拟的专用网络&…

python速成之循环分支结构学习

循环结构 应用场景 我们在写程序的时候,一定会遇到需要重复执行某条或某些指令的场景。例如用程序控制机器人踢足球,如果机器人持球而且还没有进入射门范围,那么我们就要一直发出让机器人向球门方向移动的指令。在这个场景中,让…

无涯教程-jQuery - serialize( )方法函数

serialize()方法将一组输入元素序列化为数据字符串。 serialize( ) - 语法 $.serialize( ) serialize( ) - 示例 假设无涯教程在serialize.php文件中具有以下PHP内容- <?php if( $_REQUEST["name"] ) {$name$_REQUEST[name];echo "Welcome ". $na…

【Unity2D】Order in Layer 与Layer的区别

Order in Layer 是Unity 图形渲染的顺序&#xff0c;通过设置Order in Layer &#xff0c;可以设置同层(Layer)的物体出现顺序&#xff0c;可以默认使一种物体出现在另一种物体前方 设置一物体默认在其他物体之上不被遮挡 Layer是Unity中物体的层级&#xff0c;不同物体可以位…

SOLIDWORKS Utilities应用

在实际的生产设计制造中&#xff0c;经常会遇到同一个零件多个版本&#xff0c;有可能再次调用零件的时间已经是很长时间之后&#xff0c;对于版本之间的区别就不会那么清楚&#xff0c;碰到简单明显的零件还可以轻松的找到区别&#xff0c;但是复杂的零件区别的查找可能会造成…

word显示书签并给书签添加颜色

CTRg 定位书签 在 Word 的用户界面中&#xff0c;没有直接的选项可以批量为所有书签设置颜色。但你可以使用 VBA 宏或者编写自定义的功能来实现这个需求。这里给出一个简单的 VBA 宏&#xff0c;它可以设置当前文档中所有书签内文本的颜色&#xff1a;vba Sub ColorAllBookmark…

C++程序获取python脚本控制台输出的一种方法

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> 最近要使用C程序调用python脚本&#xff0c;调用方法是通过启动python进程来调用&#xff0c;其中遇到的一个问题是在C程序中需要获取python脚本的控制台…

数组的使用(逆序、冒泡)

内存连续数据类型相同从0开始索引 找出数组中的最大值 #include <iostream> #include <stdlib.h> //随机数所在文件 using namespace std;int main() {int arr[5]{104,134,145,129,89};//初始化没有填的为0 int max0;for(int i0;i<5;i){if(arr[i]>max){ma…

Android AIDL 使用

工程目录图 请点击下面工程名称&#xff0c;跳转到代码的仓库页面&#xff0c;将工程 下载下来 Demo Code 里有详细的注释 代码&#xff1a;LearnAIDL代码&#xff1a;AIDLClient. 参考文献 安卓开发学习之AIDL的使用android进阶-AIDL的基本使用Android AIDL 使用使用 AIDL …

SpringCloudAlibaba之Ribbon

Ribbon是nacos自带的负载均衡器&#xff0c;属于客户端的负载均衡 但是在Spring高级版本中让LoadBalancer替代了 本人用的是2.1.0的nacos&#xff0c;ribbon还没有被替换。 使用&#xff1a; 在配置类中&#xff1a;LoadBalanced BeanLoadBalancedpublic RestTemplate restT…

HTTP——一、了解Web及网络基础

HTTP 一、使用HTTP协议访问Web二、HTTP的诞生1、为知识共享而规划Web2、Web成长时代3、驻足不前的HTTP 三、网络基础TCP/IP1、TCP/IP协议族2、TCP/IP的分层管理3、TCP/IP 通信传输流 四、与HTTP关系密切的协议&#xff1a;IP、TCP和DNS1、负责传输的 IP 协议2、确保可靠性的TCP…

Java期末复习基础题编程题

文章目录 基础题记录实践题记录&&与C比较题目1&#xff1a;题目2&#xff1a;题目3&#xff1a; 基础题记录 编译型语言&#xff1a; 定义&#xff1a;在程序运行之前&#xff0c;通过编译器将源程序编译成机器码(可运行的二进制代码)&#xff0c;以后执行这个程序时&…

63 # commander 的配置

初始化配置文件 新建文件夹 63&#xff0c;执行 npm init -y 修改配置文件 {"name": "kaimo-http-server","version": "1.0.0","description": "","main": "index.js","keywords"…

实用上位机--QT

实用上位机–QT 通信协议如下 上位机设计界面 #------------------------------------------------- # # Project created by QtCreator 2023-07-29T21:22:32 # #-------------------------------------------------QT += core gui serialportgreaterThan(QT_MAJOR_V…

nginx配置访问本机文件夹里的静态资源404

在nginx中配置了location访问一直404 location /web/user/ { alias /home/user/wlds/user/;index index.html;try_files $uri $uri/ /index.html 404;} 看日志发现Permission denied 因为是直接使用的yum安装的二进制包nginx&#xff0c;nginx.conf文件首行是user nginx;所以没…

回归预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLA…

从Vue2到Vue3【七】——Vue2中响应式原理的实现及其缺陷

系列文章目录 内容链接从Vue2到Vue3【零】Vue3简介从Vue2到Vue3【一】Composition API&#xff08;第一章&#xff09;从Vue2到Vue3【二】Composition API&#xff08;第二章&#xff09;从Vue2到Vue3【三】Composition API&#xff08;第三章&#xff09;从Vue2到Vue3【四】C…

Linux知识点 -- 基础IO(二)

Linux知识点 – 基础IO&#xff08;二&#xff09; 文章目录 Linux知识点 -- 基础IO&#xff08;二&#xff09;一、重定向1.输出重定向2.输入重定向3.追加重定向4.重定向系统调用5.minishell支持重定向6.stdout和stderr的区别7.常规的重定向操作8.perror的实现 二、Linux下一切…

端口复用与重映射

端口复用和重映射 STM32F1有很多的内置外设&#xff0c;这些外设的外部引脚都是与GPIO复用的。也就是说&#xff0c;一个GPIO如果可以复用为内置外设的功能引脚&#xff0c;那么当这个GPIO作为内置外设使用的时候&#xff0c;就叫做复用。 大家都知道&#xff0c;MCU都有串口…

flutter:轮播

前言 介绍几个比较有不错的轮播库 swipe_deck 与轮播沾边&#xff0c;但是更多的是一种卡片式的交互式界面设计。它的主要概念是用户可以通过左右滑动手势浏览不同的卡片&#xff0c;每张卡片上都有不同的信息或功能。 Swipe deck通常用于展示图片、产品信息、新闻文章、社…