一条SQL在MySQL中的执行过程

图解: 

第⼀步:连接器

过程

1. 建⽴连接:与客户端进⾏ TCP 三次握⼿建⽴连接;

2. 校验密码:校验客户端的⽤户名和密码,如果⽤户名或密码不对,则会报错;3. 权限判断:如果⽤户名和密码都对了,会读取该⽤户的权限,然后后⾯的权限逻辑判断都基于此时读取到的权限;

注意点:

1.如何查看 MySQL 服务被多少个客户端连接了?

mysql> show processlist;

2.空闲连接会⼀直占⽤着吗?

 空闲连接的最⼤空闲时⻓,由 wait_timeout 参数控制的

查询命令

                   mysql> show variables like 'wait_timeout';

⼿动断开

        mysql> kill connection +6;  

3.MySQL 的连接数有限制吗?

MySQL 服务⽀持的最⼤连接数由 max_connections 参数控制。

MySQL 的连接也跟 HTTP ⼀样,有短连接和⻓连接的概念。

4.怎么解决⻓连接占⽤内存的问题?

        定期断开⻓连接

        客户端主动重置连接

第⼆步:查询缓存

过程

解析出 SQL 语句的第⼀个字段,看看是什么类型的语句。

如果 SQL 是查询语句(select 语句),MySQL 就会先去查询缓存( Query Cache )⾥查找缓存数据。 如果查询的语句命中查询缓存,那么就会直接返回 value 给客户端。

如果查询的语句没有命中查询缓存中,那么就要往下继续执⾏,等执⾏完后,查询的结果就会被存⼊查询缓存中。

缺点

更新⽐较频繁的表,查询缓存的命中率很低

版本变动

MySQL 8.0 版本直接将查询缓存删掉了,也就是说 MySQL 8.0 开始,执⾏⼀条 SQL 查询语句,不会再⾛到查 询缓存这个阶段了。 对于 MySQL 8.0 之前的版本,如果想关闭查询缓存,我们可以通过将参数 query_cache_type 设置成 DEMAND这⾥说的查询缓存是 server 层的,也就是 MySQL 8.0 版本移除的是 server 层的查询缓存,并不是 Innodb 存储引 擎中的 buffer pool

第三步:解析 SQL

过程

1. 词法分析

2. 语法分析

3. 语法不对,解析器就会给报错

注意:表不存在或者字段不存在,并不是在解析器⾥做的,解析器只负责构建语法树和检查语法,但是不会去查表 或者字段存不存在。

第四步:执⾏ SQL

过程

1. prepare 阶段,也就是预处理阶段;

2. optimize 阶段,也就是优化阶段;

3. execute 阶段,也就是执⾏阶段;

1 预处理器

检查 SQL 查询语句中的表或者字段是否存在;

select * 中的 * 符号,扩展为表上的所有列;

2 优化器

优化器主要负责将 SQL 查询语句的执⾏⽅案确定下来 ⽐如在表⾥⾯有多个索引的时候,优化器会基于查询成本的考虑,来决定选择使⽤哪个索引

要想知道优化器选择了哪个索引,我们可以在查询语句最前⾯加个 explain 命令

3 执⾏器

执⾏器就会和存储引擎交互了,交互是以记录为单位的。

三种⽅式执⾏过程

  • 主键索引查询
  • 全表扫描
  • 索引下推(MySQL 5.6 推出的查询优化策略)

特点

  • 执⾏器查询的过程是⼀个 while 循环
  • Server 层每从存储引擎读到⼀条记录就会发送给客户端,之所以客户端显示的时候是直接显示所有记录的, 是因为客户端是等查询语句查询完成后,才会显示出所有的记录

总结

执⾏⼀条 SQL 查询语句,期间发⽣了什么?

1.连接器:建⽴连接,管理连接、校验⽤户身份;

2.查询缓存:查询语句如果命中查询缓存则直接返回,否则继续往下执⾏。MySQL 8.0 已删除该模块;

3.解析 SQL,通过解析器对 SQL 查询语句进⾏词法分析、语法分析,然后构建语法树,⽅便后续模块读取表 名、字段、语句类型;

4.执⾏ SQL:执⾏ SQL 共有三个阶段:

  • 预处理阶段:检查表或字段是否存在;将 select * 中的 * 符号扩展为表上的所有列。
  • 优化阶段:基于查询成本的考虑,选择查询成本最⼩的执⾏计划;
  • 执⾏阶段:根据执⾏计划执⾏ SQL 查询语句,从存储引擎读取记录,返回给客户端

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

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

相关文章

手机无线投屏到windows11电脑

1 安装无线投影组件 2 电脑端打开允许其他设备投影的开关 3 手机找到投屏选项 4 手机搜索可用设备连接即可 这里的官方文档给的不太好,给了一些让人眼花撩乱的信息,以下是经过整合的有效信息

Appium基础操作元素定位实操入门

一、基础操作 1、安装和配置:包括安装 Appium 服务器、设置环境变量等。2、启动服务器:使用命令行或相关工具启动 Appium 服务器。3、连接设备或模拟器:将测试设备或模拟器连接到计算机上。4、识别应用程序:指定要测试的应用程序的相关信息,如包名和活动名。上述1~4内容可…

金融衍生品市场

金融衍生品市场 衍生金融品的作用衍生金融工具远期合约期货合约期权 衍生金融品的作用 套期保值(Hedging) 组合多头头寸(long position)与空头头寸(short position)例:股票与股指期货 投机 衍生金融工具 远期合约 定义:在将来…

翻译: 硅谷软件工程师面试:准备所需的一切

没有人有时间去做成百上千道LeetCode题目,好消息是你实际上并不需要做那么多题目就能够在FAANG公司找到工作! 我曾经在Grab工作,这是东南亚的一家共享出行公司,但我对工作感到沮丧,想要进入FAANG公司,但我…

【opencv】教程代码 —features2D(5)旋转相机的基本全景拼接

基本全景拼接 panorama_stitching_rotating_camera.cpp 将第二张图像进行透视变换后与第一张图像拼接 #include <iostream> // 包含了一些用于输入输出的函数 #include <opencv2/core.hpp> // 包含了OpenCV核心库的一些常用类和函数 #include <opencv2/imgpro…

ZooKeeper 宕机如何应对

ZooKeeper 本身也是集群&#xff0c;推荐配置奇数个服务器。因为宕机就需要选举&#xff0c;选举需要半数 1 票才能通过&#xff0c;为了避免打成平手。进来不用偶数个服务器。 如果是 Follower 宕机了&#xff0c;没关系不影响任何使用。用户无感知。如果 Leader 宕机&#x…

Android视角看鸿蒙第十课-鸿蒙的布局之线性布局

Android视角看鸿蒙第十课-鸿蒙的布局之线性布局 导读 这篇文章开始&#xff0c;依次学习鸿蒙的八大布局&#xff0c;这是第一篇&#xff0c;所以顺带也会聊聊通用属性。 文档地址 文档地址 如何定义一个线性布局 Android中是使用LinearLayout来构建线性布局的&#xff0c…

ChatGPT chrome扩展下载与安装

官方下载地址 https://chromewebstore.google.com/detail/lpbhmlbicmgjpacbofijdfpcplfhakeo 截图 安装 离线安装 下载地址 https://static.xutongbao.top/app/chatgpt-chrome-crx-v0.0.7.zip 打开链接 chrome://extensions/ 人工智能学习网站 https://chat.xutongbao.to…

谷粒商城——RabbitMQ

0. 消息中间件 1.RabbitMQ的核心概念 2. 工作流程 整体架构&#xff1a; 相关细节&#xff1a; 上述要注意的是&#xff1a; 路由键包含在message的头中&#xff0c;其作用是用于指定该消息存储与哪个消息队列中。 信道是客户端&#xff08;包括生产者和消费者&#xff09;用…

Vue 组件化编程

Vue 组件化编程 非单文件组件 定义组件 使用Vue.extend(options&#xff09;创建 不要写eldata要写成函数&#xff0c;避免组件被复用时&#xff0c;数据存在引用关系 注册组件 局部注册&#xff1a;new Vue()的时候&#xff0c;options传入components全局注册&#xff1a;V…

使用OpenSSL工具验证证书

验证证书的原理涉及到公开密钥基础设施&#xff08;Public Key Infrastructure, PKI&#xff09;和数字证书的加密原理。以下是验证证书文件的基本原理和步骤&#xff1a; 证书组成&#xff1a;SSL 证书通常包含公钥、证书所有者的信息、证书颁发机构&#xff08;Certificate A…

回收站删除以后还能撤销吗 回收站删除以后怎么找回 回收站清空了怎么恢复 easyrecovery数据恢复软件

回收站删除以后能撤销吗&#xff1f;有不少网友前一秒清空回收站&#xff0c;后一秒就开始在网上疯狂搜寻如何撤销删除回收站的办法。实际上&#xff0c;清空回收站并不可怕&#xff0c;被删除的数据仍然保存在我们的电脑硬盘中。今天我为大家介绍回收站删除以后怎么找回数据的…

HTTP 常见面试题(计算机网络)

HTTP 基本概念 一、HTTP 是什么&#xff1f; HTTP(HyperText Transfer Protocol) &#xff1a;超文本传输协议。 HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。 「HTTP 是用于从互联网服务器传输超文本到本…

苍穹外卖04 (新增内表的外键id获取,多表分页查询,多表批量删除,修改先查在改内表外键id用主表的,起售时包含了“停售”状态的外关联表)

1. 新增套餐 1 需求分析和设计 业务规则&#xff1a; 套餐名称唯一 套餐必须属于某个分类 套餐必须包含菜品 名称、分类、价格、图片为必填项 添加菜品窗口需要根据分类类型来展示菜品 新增的套餐默认为停售状态 2 代码实现 1 根据分类id查询菜品 DishControllerGetMa…

【C语言环境】Sublime中运行C语言时MinGW环境的安装

要知道&#xff0c;GCC 官网提供的 GCC 编译器是无法直接安装到 Windows 平台上的&#xff0c;如果我们想在 Windows 平台使用 GCC 编译器&#xff0c;可以安装 GCC 的移植版本。 目前适用于 Windows 平台、受欢迎的 GCC 移植版主要有 2 种&#xff0c;分别为 MinGW 和 Cygwin…

HTTP 协议中常用的两种请求方法:get请求与post请求

一、get请求 &#xff08;1&#xff09;什么是 GET 请求&#xff1f; GET 请求是一种向服务器请求获取资源的方式。它通过 URL 将请求参数附加到请求中&#xff0c;并将请求发送给服务器。GET 请求通常用于获取数据&#xff0c;例如读取文章、获取用户信息等操作。 在Node.j…

数据分析之POWER BI Desktop可视化应用案列

在power bi中导入数据 导入前期建好的模型 简单介绍&#xff08;power bi desktop&#xff09; 将右边字段全部展开 各类数据 所作的模型 在excel中是单向的&#xff0c;power bi 中可以是双向的 右键单击----点击属性 选择两个---在两个方向上应用安全筛选器 变为双向的…

每日面经分享(pytest入门)

1. pytest具有什么功能 a. 自动发现和执行测试用例&#xff1a;pytest可以自动发现项目中的测试文件和测试函数&#xff0c;无需手动编写测试套件或测试运行器。 b. 丰富的断言函数&#xff1a;pytest提供了丰富的断言函数&#xff0c;方便地验证测试结果是否符合预期。断言函…

JQuery的定义

jQuery是一个js库&#xff0c;使用jQuery会比js简单一点 jQuery文件是一个自执行函数 jQuery文件是一个自执行函数 $传递的参数不同&#xff0c;效果也不同&#xff1a; 传递的是匿名函数&#xff0c;那$就是一个入口函数&#xff0c;传递的是一个字符串&#xff0c;那$就…

执行SQL分析打印

p6spy mybatis-plus执行sql打印。 1 p6spy 1.1 引入pom <!-- https://mvnrepository.com/artifact/p6spy/p6spy --> <dependency><groupId>p6spy</groupId><artifactId>p6spy</artifactId><version>3.9.1</version> </…