《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 并不是完全相同的。

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

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

相关文章

idea模块的pom.xml被划横线,不识别的解决办法

目录 问题: 解决办法: 1.打开设置 2. 取消勾选 3.点击确认 4.解决 问题提出: 写shi山的过程中,给模块取错名字了,改名的时候不知道点到了什么,一个模块的pom.xml变成灰色了&#xff0…

排序算法(冒泡排序、选择排序、插入排序、希尔排序、堆排序、快速排序、归并排序、计数排序)

🍕博客主页:️自信不孤单 🍬文章专栏:数据结构与算法 🍚代码仓库:破浪晓梦 🍭欢迎关注:欢迎大家点赞收藏关注 文章目录 🍓冒泡排序概念算法步骤动图演示代码 &#x1f34…

谷歌: 安卓补丁漏洞让 N-days 与 0-days 同样危险

近日,谷歌发布了年度零日漏洞报告,展示了 2022 年的野外漏洞统计数据,并强调了 Android 平台中长期存在的问题,该问题在很长一段时间内提高了已披露漏洞的价值和使用。 更具体地说,谷歌的报告强调了安卓系统中的 &quo…

Java阻塞队列

什么阻塞队列 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法。 支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。支持阻塞的移除方…

vue项目开发常用工具类

防止重复造轮子,将经常用的函数进行记录,也参考网上的并一起进行记录,后续会持续更新常用到的函数工具类方法😉😉 /** 验证手机号是否合格* true--说明合格*/ export function isPhone(phoneStr) {let myreg /^[1][3,…

艺人商务代言:避雷策略与成功合作之道

避免在艺人商务代言中遇到风险,是每个企业和艺人都应该高度重视的问题。代言活动是一种有效的市场营销手段,可以为企业带来广泛的曝光和销售增长,同时也能让艺人获得额外的收入和更高的知名度。然而,不慎选择错误的代言合作可能带…

Vue3--->组合式API与Pinia

目录 使用create-vue搭建 1、使用create-vue创建项目 2、项目目录和关键文件 组合式API 1、组合式API - setup选项 2、组合式API - reactive和ref函数 3、组合式API - computed 4、组合式API - watch 1、基础使用 - 侦听单个数据 2、基础使用 - 侦听多个数据 3、immediate&…

基于 FFmpeg 的跨平台视频播放器简明教程(七):使用多线程解码视频和音频

系列文章目录 基于 FFmpeg 的跨平台视频播放器简明教程(一):FFMPEG Conan 环境集成基于 FFmpeg 的跨平台视频播放器简明教程(二):基础知识和解封装(demux)基于 FFmpeg 的跨平台视频…

leetcode每日一题Day2——344. 反转字符串

✨博主:命运之光 🦄专栏:算法修炼之练气篇(C\C版) 🍓专栏:算法修炼之筑基篇(C\C版) 🐳专栏:算法修炼之练气篇(Python版) …

【面试题】与通义千问的芯片前端设计模拟面试归纳

这里是尼德兰的喵芯片设计相关文章,欢迎您的访问! 如果文章对您有所帮助,期待您的点赞收藏! 让我们一起为芯片前端全栈工程师而努力! 前言 两个小时,与chatGPT进行了一场数字IC前端设计岗的面试_尼德兰的喵的博客-CSDN博客 和GPT-3.5的回答可以对比品尝,味道更好。 模…

Jenkins pipeline 脚本语言学习支持

1 引言 Groovy是用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。 使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性。 Groovy是一…

用Python写了一个下载网站所有内容的软件,可见即可下

目录标题 前言环境介绍:代码实战获取数据获取视频采集弹幕采集评论 GUI部分尾语 前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 今天我们分享一个用Python写下载视频弹幕评论的代码。 顺便把这些写成GUI,把这些功能放到一起让朋友用起来更方便~ 环境介绍: py…

tinkerCAD案例:29. 摇头娃娃

Research Your Favorite Bobblehead 摇头娃娃 Project Overview: 项目概况: Design and create your favorite Minecraft 3D bobble head. All you need is a computer, 3D printer, spring and your creativity to your favorite Minecraft character in the for…

dreamStudio试用教程【AI绘画】

文章目录 dreamStudio 简介打开官网如下邮箱登录即可切换随机提示词新用户的试用次数目前只有25张图像📙 预祝各位 前途似锦、可摘星辰 dreamStudio 简介 https://github.com/Stability-AI/StableStudio StabilityAI在官网上重磅宣布——旗下的文生图应用DreamStu…

智能提词器有哪些?了解一下这款提词工具

智能提词器有哪些?使用智能提词器可以帮助你更好地准备和交付演讲、报告或其他提词场合。它可以提高你的效率,节省你的时间,并让你更加自信地与听众沟通。另外,智能提词器还可以提供一些有用的功能,如语音识别、智能建…

Spring Boot实践三 --数据库

一,使用JdbcTemplate访问MySQL数据库 1,确认本地已正确安装mysql 按【winr】快捷键打开运行;输入services.msc,点击【确定】;在打开的服务列表中查找mysql服务,如果没有mysql服务,说明本机没有…

迁移学习、微调、计算机视觉理论(第十一次组会ppt)

@TOC 数据增广 迁移学习 微调 目标检测和边界框 区域卷积神经网络R—CNN

IDEA开启并配置services窗口

前言: 一般一个spring cloud项目中大大小小存在几个十几个module编写具体的微服务项目。此时,如果要调试测需要依次启动各个项目比较麻烦。 方法一: 默认第一次打开项目的时候,idea会提示是否增加这个选项卡,如果你没…

《golang设计模式》第一部分·创建型模式-03-建造者模式(Builder)

文章目录 1. 概念1.1 角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概念 1.1 角色 Builder(抽象建造者):给出一个抽象接口,以规范产品对象的各个组成成分的建造。ConcreteBuilder(具体建造者)&a…

NOsql之MongoDB入门分享

目录 一、MongoDB简介 1、概念理解 2、yum安装部署 3、二进制安装部署 4、配置文件解析 二、MongoDB基本管理 1、登录操作 2、管理命令 3、用户管理 一、MongoDB简介 1、概念理解 关系型数据库(RDBMS:Relational Database Management System) MySql、Ora…