MySQL·:执行一条查询语句期间发生了什么?

news2024/11/25 16:46:34

MySQL·的架构分为两层,Server 层和存储引擎层

  • server·层负责建立连接、分析和执行SQL,MySQL·,MySQL·大多数的核心功能模块都在在这里实现,下图上半部分都是server·层做的事情,另外,所有的内置函数(如日期、时间、数学和加密函数等)和所有跨存储引擎的功能(如存储过程、触发器、视图等)都在server层实现
  • 存储引擎层负责数据的存储和提取,MySQL·5.5版本开始默认使用InnoDB存储引擎,索引由存储引擎实现,不同的存储引擎支持的索引类型也不相同,InnoDB支持的索引类型是B+树
    在这里插入图片描述
  1. 连接器
    当我们使用MySQL·的时候第一步要进行连接操作,连接的时候一般需要三个参数,这里以Linux终端为例:
# -h指定MySQL服务器的IP,我们自己用的话一般是localhost(这种情况下可以不用这个参数)
# -P 默认是3306也可以自己显示声明
# -u 指定用户名
# -p 指定密码
mysql -h$ip -P$port -u$user -p$pwd

MySQL的传输层使用的是TCP协议,首先按照用户提供的IP+port进行三次握手,完成三次握手后进行用户名和密码的验证,验证完成后连接器获取该用户的权限然后缓存起来,后续该用户的任何操作都会基于这条缓存的权限进行,即使连接过程中管理员修改了这个用户的权限也只能应用于该用户下次连接。

空闲连接处理:不同于http的保活机制,MySQL·中借助wait_timeout这个参数控制,如果在这个时间内客户端没有新的请求则会中断连接。

MySQL·是连接数量有限制,超过最大连接数的时候别的客户端就连接不了了,我这里是151个用户。
在这里插入图片描述

  1. 查询缓存
    MySQL·会缓存查询语句的结果然后下次遇到相同的语句时直接返回结果,这么看这个缓存还是有点用的,但是更新缓存的成本太大了,遇到相同的请求的概率太低了,所以MySQL·8.0后删除了缓存机制。

注意:移除的是server·层的查询缓存而不是InnoDB中的buffer pool

  1. 解析器
    解析器完成 词法分析语法分析
  • 词法分析,会根据输入的字符串识别区关键字出来
  • 语法分析,根据词法分析的结果,语法解析器会根据词法规则判断输入的SQL语句似乎否满足MySQL·语法,没问题的话构建SQL语法树。
  1. 执行器
  • 预处理过程,检查 SQL 查询语句中的表或者字段是否存在,将 select * 中的 * 符号,扩展为表上的所有列。
  • 优化过程,优化器主要负责将 SQL 查询语句的执行方案确定下来,比如在表里面有多个索引的时候,优化器会基于查询成本的考虑,来决定选择使用哪个索引(可以在查询语句前加上explain)。
  • 执行过程,经历完优化器后,就确定了执行方案,接下来 MySQL 就真正开始执行语句了,这个工作是由「执行器」完成的。在执行的过程中,执行器就会和存储引擎交互了,交互是以记录为单位的。
    查询方式:
  • 主键索引查询,走索引
  • 全表扫描,一条一条比较

索引下推
通常情况下,数据库查询的执行顺序是先使用索引找到满足条件的行,然后再对这些行进行进一步的条件过滤。而索引下推则在这个过程中进行了优化,将部分条件过滤操作下推到索引层级进行执行,通过索引下推能够减少二级索引在查询时的回表操作(MySQL 5.6 推出的查询优化策略)。

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

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

相关文章

Springboot+Vue项目-基于Java+MySQL的房产销售系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

JS - BOM(浏览器对象模型)

BOM 浏览器对象模型 BOM可以使我们通过JS来操作浏览器 在BOM中为我们提供了一组对象,用来完成对浏览器的操作 BOM对象 BOM(Browser Object Model)是指浏览器对象模型,它提供了与浏览器窗口进行交互的对象和方法。BOM包括一些核…

C++——StackQueue

目录 一Stack 1介绍 2接口 3模拟实现 4栈的oj题 二Queue 1介绍 2接口 3模拟实现 三容器适配器 1再谈栈和队列 四优先级队列 1接口 ​编辑 2仿函数 五dequeue的简单介绍 一Stack 1介绍 先来看看库中对栈的介绍: 1. stack是一种容器适配器&#x…

scaling laws for neural language models

关于scaling law 的正确认识 - 知乎最近scaling law 成了最大的热词。一般的理解就是,想干大模型,清洗干净数据,然后把数据tokens量堆上来,然后搭建一个海量H100的集群,干就完了。训练模型不需要啥技巧,模型…

解决 App 自动化测试的常见痛点!

App 自动化测试中有些常见痛点问题,如果框架不能很好的处理,就可能出现元素定位超时找不到的情况,自动化也就被打断终止了。很容易打消做自动化的热情,导致从入门到放弃。比如下面的两个问题: 一是 App 启动加载时间较…

Vue 移动端(H5)项目怎么实现页面缓存(即列表页面进入详情返回后列表页面缓存且还原页面滚动条位置)keep-alive缓存及清除keep-alive缓存

一、需求 产品要求:Vue移动端项目进入列表页,列表页需要刷新,而从详情页返回列表页,列表页则需要缓存并且还原页面滚动条位置 二、实现思路 1、使用Vue中的keep-alive组件,keep-alive提供了路由缓存功能 2、因为我项…

java快速构建飞书API消息推送、消息加急等功能

文章目录 飞书机器人自定义机器人自定义应用机器人 自定义应用发送消息普通文本 text富文本 post图片 image文件 file语音 audio视频 media消息卡片 interactive分享群名片 share_chat分享个人名片 share_user 批量发送消息消息加急发送应用内加急发送短信加急 发送电话加急spr…

Linux的网口名字的命名规则

在工作中,偶尔看到有些机器的网口名字是以ethX命令,有些则以enpXsX这种名字命名。网上的资料说的都不太明白,资料也无据可查,很难让人信服。于是决定自己查了下官方的资料和源码,把这些搞清楚。 官方文档:Predictable…

visual studio 2017开发QT框架程序

1. 配置开发环境 首先创建项目 进入到项目后,右键点击项目点击属性,配置如下:

使用 create-vue 脚手架工具创建一个基于 Vite 的项目,并包含加入 Vue Router 等可选项

如果你打算启动一个新项目,你可能会发现使用 create-vue 这个脚手架工具更容易,它能创建一个基于 Vite 的项目,并包含加入 Vue Router 的选项,指令如下: // npm npm create vuelatest// yarn yarn create vue// pnpm …

C语言中抽象的编译和链接原理

今天04.12,身体小有不适,但是睡不着觉,秉着不能浪费时间的原则,现在就简单写一下有关我们C语言中编译和链接的大体过程吧,因为编译和链接是比较抽象的,而且内容是比较底层,我们这里就简单了解它…

Docker 镜像推送到docker hub

查看容器 #sudo docker ps -a commit容器为镜像 $ sudo docker commit d7b5e8d56a75 ubuntu_pytorch39_v4 #sha256: ********** 查看镜像信息 $ sudo docker images 登录 docker hub $ sudo docker login --username用户名 registry.cn-beijing.aliyuncs.com #密码 为…

【电控笔记6】电流回路+延迟效应

问题提出 数字控制系统的delay: 5.4节有介绍T0=0.5TS 低通滤波器的时间常数? 可用示例程序 m2 2 1b 如下图画出开环系统的伯德图进行比较,如图 2-2-4 所示,由于延迟组件会侵蚀系统的相位,因此从图可以看出,加入延迟效应后,q轴电流回路的相位裕度(Phase Margin) 从…

jsoncpp 编译和使用

原文链接: jsoncpp的编译和使用 jsoncpp 编译出库文件 1.从github仓库下载 2.下载 cmake 工具 3.生成VS项目 4.编译得到需要的库文件 jsoncpp 的使用 查看原文

WebGL 2.0相较于1.0有什么不同?

作者:STANCH 1.概述 WebGL 1.0自推出以来,已成为广泛支持的Web标准,既能跨平台,还免版税。它通过插件为Web浏览器带来高质量的3D图形,这是迄今为止市场上使用最广泛的Web图形,并得到Apple,Goog…

如何使用 ArcGIS Pro 制作热力图

热力图是一种用颜色表示数据密度的地图,通常用来显示空间分布数据的热度或密度,我们可以通过 ArcGIS Pro 来制作热力图,这里为大家介绍一下制作的方法,希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的POI数…

安装ubuntu双系统步骤

1,给U盘分区做启动盘 先下载ubuntu20.04.4-desktop-amd64.iso的镜像,双击打开UltraISO工具,然后点打开 点击写入,选择是 等待制作镜像写入U盘完成 系统镜像做完后,把需要给ubuntu安装的软件也一起拷贝到U盘里面 2&am…

2024年认证杯数学建模挑战赛C题全网最全解析

2024年认证杯C题的已经完成啦,包括参考论文,模型代码,分享给大家~ 问题分析 对于这些问题,我们首先需要确定影响日光辐射降低效应的关键参数,例如海盐气溶胶的浓度、粒子大小、分布以及喷洒高度和范围。同…

性能优化-01

当看到性能指标时,你会首先想到什么呢?我相信 “高并发” 和 “响应快” 一定是最先出现在你脑海里的两个词,而它们也正对应着性能优化的两个核心指标—— “吞吐” 和 “延时” 。这两个指标是从应用负载的视角来考察性能,直接影…

CentOS7里ifcfg-eth0文件不存在解决方案/Centos7修改网络IP解决方案

Centos7网络IP地址手动设置 1、centos7没有ifcfg-eth0,我的centos7也没有其他博客说的什么ifcfg-ens33、ifcfg-ens32,然后我打开了我这里的ifcfg-eno***,结果发现就是centos6里的ifcfg-eth0里的网络配置。2、vim ifcfg-eno***(按t…