一条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 查询语句,从存储引擎读取记录,返回给客户端

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

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

相关文章

正多边形拓扑与泛函

(原创:Daode3056) 也许,关于“拓扑”,“泛函”几本书上的内容与实例都是大同小异,总是那么点内容,数学要开拓一些新领域与新内容才能满足不断发展的社会与工业各种需要。本文就以人工智能生成对…

【独立开发前线】Vol.29 专注于电子邮件签名,也可以依靠SEO年入70万美元

今天要给大家分享的案例是MySignature,一个专注于电子邮件签名的产品; 它的官网是:MySignature: Free Email Signature Generator 提到电子邮件签名,很多人想到的肯定是“那不是电子邮件结尾的几行图文介绍吗,这也能做…

CCF-CSP20<2020-09>-第1/2题

202009-1 对称检测点查询 题目:202009-1 题目分析: 给定一群点的坐标,求出距离某点最近的3个点的坐标。 纯模拟即可。 AC代码: // -*- coding:utf-8 -*-// File : 202009-1.cpp // Time : 2024/03/23 // Author …

pajamas 0 publish repo fst in gitee

0. 好久没有blog了,真的好久了,先交代一波 因为半年来发生了很多,计划有变,辞工作,出去耍,找工作,重新计划… 从半年前开始,就想好了,最近这两年应该优先会写代码 &…

uniapp开发App(二)开通 微信授权登录功能(应用签名、证书、包名 全明白)

前言:开发App肯定要包含登陆,常用登陆方式很多,我选择微信登陆。 一、如何获得微信的授权登陆 答:申请,根据uniapp官网的提示有如下三个步骤 开通 1. 登录微信开放平台区,添加移动应用并提交审核&#xf…

热电偶测温仪UT320D 拆机

性能应该还好吧,毕竟是便宜货。本来打算看看学习一下热电偶电路的前端设计,用什么滤波器、保护电路之类的,结果比较失望。 拆机 打开后盖的效果: PCB 另一面没有元件,打眼一看就能看出电路相当简单,功能全…

蓝桥备赛——矩阵读入

题目描述 如上图所示,是一道有关二维前缀和的问题,因为涉及到二维,肯定就是以矩阵的形式进行读入的。 为此,针对矩阵的读入形式进行总结,可以大致总结出两种类型如下: 二维列表推导式 n, m, k map(int…

一百以内累加(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS #include <stdio.h>int main() {//初始化变量值&#xff1b;int a 2;int result 1;//循环运算&#xff1b;while (a < 100){//加&#xff1b;result a result;//改变变量值&a…

杨伟民:提高中国消费的七张长效王牌

“新冠疫情冲击以来&#xff0c;需求不足&#xff0c;特别是居民消费不足的问题再一次凸显&#xff0c;我觉得一方面是疫情冲击的短期影响&#xff0c;另一方面也是长期的深层次结构性问题并没有得到解决。”3月25日&#xff0c;在中国发展高层论坛2024年年会“全球经济增长趋势…

C++——C++11线程库

目录 一&#xff0c;线程库简介 二&#xff0c;线程库简单使用 2.1 传函数指针 ​编辑 2.2 传lamdba表达式 2.3 简单综合运用 2.4 线程函数参数 三&#xff0c;线程安全问题 3.1 为什么会有这个问题&#xff1f; 3.2 锁 3.2.1 互斥锁 3.2.2 递归锁 3.3 原子操作 3…

基于springboot实现房屋租赁系统项目【项目源码+论文说明】

基于springboot实现房屋租赁系统演示 摘要 社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个用户的使用。互联网具有便利性&#xff0c;速度快&#xff0c;效率高&#xff0c;成本…

网络类型整理

1、点到点 &#xff1a;在一个网段内只能存在&#xff0c;两个物理节点 MA-多路访问 -- 在一个网段内物理节点的数量不限制 MA--- BMA NBMA 2、BMA -- 广播型多路访问 3、NBMA--非广播型多路访问 注&#xff1a;不同网络类型实际为不同的数据链路层技术&#xff1b;由于二…

AI渣土车监测报警摄像机

随着城市建设的不断发展和交通运输的快速增长&#xff0c;渣土车作为建筑行业中不可或缺的运输工具&#xff0c;承担着大量的渣土运输任务。然而&#xff0c;由于渣土车在运输过程中存在超速、违规变道、碾压行人等交通安全问题&#xff0c;给道路交通和行人安全带来了严重的隐…

OrangePi AIpro(香橙派)远程连接,在windows上显示图形化桌面

OrangePi AIpro&#xff08;香橙派&#xff09;远程连接&#xff0c;在windows上显示图形化桌面 一、连接调试串口1、硬件连接&#xff08;1&#xff09;首先需要准备一根 Micro USB接口&#xff08;老安卓线&#xff09;的数据线&#xff08;2&#xff09;将 Micro USB 接口一…

Docker之ruoyi-vue项目部署

文章目录 创建自定义网络安装redis安装mysql发布若依项目--后端使用Dockerfile自定义镜像运行容器 nginx 创建自定义网络 #搭建net-ry局域网&#xff0c;用于部署若依项目 docker network create net-ry --subnet172.68.0.0/16 --gateway172.68.0.1 注意1&#xff1a;关闭宿主…

【uC/OS-III篇】uC/OS-III 创建第一个任务(For STM32)

uC/OS-III 创建第一个任务&#xff08;For STM32&#xff09; 日期&#xff1a;2024-3-30 23:55&#xff0c;结尾总结了今天学习的一些小收获 本博客对应的项目源码工程 源码项目工程 1. 首先定义错误码变量 // 用于使用uC/OS函数时返回错误码 OS_ERR err; 2. 定义任务控制…

非NVIDIA平台下的CUDA的替代方案OpenCL,第一步如何获取PlatformInfo、DeviceInfo

非NVIDIA平台下的CUDA的替代方案OpenCL&#xff0c;第一步如何获取PlatformInfo、DeviceInfo 介绍 当谈到高性能计算&#xff0c;NVIDIA的CUDA框架无疑是一个强大的工具。OpenC&#xff08;Open Computing Language&#xff09;是一个更为通用的解决方案&#xff0c;或者你使用…

MySQL面试必备一之索引

本文首发于公众号&#xff1a;Hunter后端 原文链接&#xff1a;MySQL面试必备一之索引 在面试过程中&#xff0c;会有一些关于 MySQL 索引相关的问题&#xff0c;以下总结了一些&#xff1a; MySQL 的数据存储使用的是什么索引结构B 树的结构是什么样子什么是复合索引、聚簇索…

SVFormer: Semi-supervised Video Transformer for Action Recognition

标题&#xff1a;SVFormer&#xff1a;用于动作识别的半监督视频Transformer 原文链接&#xff1a;https://doi.org/10.48550/arXiv.2211.13222 源码链接&#xff1a;GitHub - ChenHsing/SVFormer 发表&#xff1a;CVPR 摘要 半监督动作识别是一项具有挑战性但至关重要的任…

2024年道路运输企业安全生产管理人员证模拟考试题库及道路运输企业安全生产管理人员理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年道路运输企业安全生产管理人员证模拟考试题库及道路运输企业安全生产管理人员理论考试试题是由安全生产模拟考试一点通提供&#xff0c;道路运输企业安全生产管理人员证模拟考试题库是根据道路运输企业安全生产…