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

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 推出的查询优化策略)。

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

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

相关文章

在mini2440上编写linux应用程序、字符设备驱动程序的编写与编译

在mini2440上编写linux应用程序 结合前两篇的学习,一个linux操作系统已经在mini2440上运行起来了,结合交叉编译环境和nfs等工具,我们可以在mini2440上编写任何我们在linux系统编程中学到的应用程序。一个简要的多文件Makefile文件如下&#…

设计模式——2_9 模版方法(Template Method)

人们往往把任性也叫做自由,但是任性只是非理性的自由,人性的选择和自决都不是出于意志的理性,而是出于偶然的动机以及这种动机对感性外在世界的依赖 ——黑格尔 文章目录 定义图纸一个例子:从文件中获取信息分几步?Rea…

基于Spingboot+vue协同过滤音乐推荐管理系统

项目演示视频效果: 基于Spingbootvue协同过滤音乐推荐管理系统 基于Spingbootvue协同过滤音乐推荐管理系统 1、项目介绍 基于Springboot的音乐播放管理系统总共两个角色,用户和管理员。用户使用前端前台界面,管理员使用前端后台界面。 有推荐…

Golang内存、指针逃逸、垃圾回收机制概览

最近看到了一篇文章是关于go的内存、指针逃逸和垃圾回收机制的,发现自己并未很细致的了解过这方面的内容,于是在翻阅各种文章的情况下,写出了这篇总结,参考文章放在文末,可自取 内存 Go 语言使用一个自带的垃圾收集器…

【S32K3 入门系列】- ADC 模块简介(上)

一、 前言 对于 S32K3 系列的初学者来说,S32K3 系列的参考手册阅读难度是让人望而却步的,本系列将对 S32K3 系列的外设进行逐一介绍,对参考手册一些要点进行解析。本文旨在介绍 S32K3 系列的 ADC 模块, ADC(Analog to…

node端导出excel-用请求排队来限流

需求 有一个会执行luckySheet脚本并且导出excel的node接口,会在每天凌晨执行,但是文件过大时会内存溢出 之前有用worker来实现多线程(主要是避免变量污染),但这样只能保证主线程不卡死,几个子线程合起来占用…

MDC搭配ttl使用!!!

一、简介 MDC 介绍​ MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 和 logback 提供的一种方便在多线程条件下记录日志的功能。MDC 可以看成是一个与当前线程绑定的Map,可以往其中添加键值对。MDC 中包含的内容可以被…

使用yolov8 进行实例分割训练

1、基于windows 的ISAM标注 直接下载安装包,解压后即可使用 链接:https://pan.baidu.com/s/1u_6jk-7sj4CUK1DC0fDEXQ 提取码:c780 2、标注结果转yolo格式 通过ISAM标注后的json文件路径 原始json格式如下: ISAM.json 转 yolo.…

牛客2024 【牛客赛文X】春招冲刺 ONT34 加油站【中等 贪心 C++、Java、Go、PHP】

题目 题目链接: https://www.nowcoder.com/practice/a013a0691a0343aeb262ca1450d2fe4e 思路 贪心: 如果总的gas小于走完全程的cost,直接返回-1不需要再找了 如果确保了可以走完一圈之后,那么从index 0开始找, 当g…

【cygwin】工具安装apt-cyg

目录 下载安装查看是否安装成功安装软件 下载 git clone https://github.com/transcode-open/apt-cyg.git安装 cd apt-cyg mv apt-cyg /usr/local/bin/ 查看是否安装成功 apt-cyg --help安装软件 apt-cyg install nano

视频号小店怎么做?新手开店必备运营攻略,看这一篇就够了

大家好,我是电商笨笨熊 作为腾讯推出的电商项目,视频号小店在推出到现在一直都备受关注,同时也吸引了不少玩家入驻; 毕竟作为一个新平台、新市场,一个适合跑马圈地的红利平台,谁都想在这里分的一杯羹。 …

Linux debian gdb dump

1.开发背景 记录 debian 下应用程序崩溃调试方法 2.开发需求 程序越界可以定位到越界的位置附近 3.开发环境 debian 操作系统,如果不支持需要查看是否存在对应的可执行文件 4.实现步骤 4.1 设置 dump 输出大小 ulimit -c unlimited # 设置输出大小 生成core 文…

一个文生视频MoneyPrinterTurbo项目解析

最近抖音剪映发布了图文生成视频功能,同时百家号也有这个功能,这个可以看做是一个开源的实现,一起看看它的原理吧~ 一句话提示词 大模型生成文案 百家号生成视频效果 MoneyPrinterTurbo生成视频效果 天空为什么是蓝色的? 天空…

上位机图像处理和嵌入式模块部署(智能硬件的介绍)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 目前,用上位机软件虽然可以部署项目,但是它本身有自己的缺点,那就是稳定性差、价格贵。稳定性这部分&#xff0…

深度剖析扫雷游戏的各个知识点(2)

小伙伴们,大家好。这次继续上次的剖析扫雷游戏的知识点。 那么本次咱们主要是讲扫雷中的宏定义,也就是#define这些 首先#define是用来定义一个宏,后面就是类似于和变量一样的常量名,以及最后的数字就是它的值。 定义规则 #def…

数据结构——树和二叉树

目录 前言 一、树概念及结构 1.1树的概念 1.2 树的相关概念 ​编辑 1.3 树的表示 1.4 树的应用 2.二叉树概念及结构 2.1 二叉树概念 2.2 现实中的二叉树 2.3 特殊的二叉树 2.4 二叉树的性质 2.5 二叉树的存储结构 总结 前言 之前我们学习到的数据结构都是线性的…

Linux Makefile

1.开发背景 linux 下编译程序需要用到对应的 Makefile,用于编译应用程序。 2.开发需求 编写 Makefile 编译应用程序 1)支持多个源文件 2)支持多个头文件 3)支持只编译修改的文件,包括源文件和头文件 4)支持…

【Android Studio报错】:* What went wrong:Out of memory. Java heap space

项目场景: 今天,刚打开自己的安卓项目发现报错: 报错: * What went wrong: Out of memory. Java heap space Possible solution: - Check the JVM memory arguments defined for the gradle process in: gradle.properties in…

STM32G030F6P6TR ST意法

STM32G030F6P6TR是ST(意法半导体)一款基于高性能ArmCortex-M032位RISC内核,工作频率高达64MHz的32位MCU微控制器。代理销售ST(意法半导体)全系列IC电子元器件-中芯巨能为您提供STM32G030F6P6TR(ST 32位MCU)引脚图及中文参数介绍等内容。 STM32G030F6P6TR的中文参数 …

Python多态

1.多态 多态定义:多态(polymorphism)是指同一个方法调用由于对象不同可能会产生不同的行为 注意以下2点: 1.多态是方法的多态,属性没有多态。 2.多态的存在有2个必要条件:继承、方法重写 class Animal:de…