mysql查询语句执行过程及运行原理命令

news2024/12/27 0:02:14

Mysql查询语句执行原理

数据库查询语句如何执行?

  1. DML语句首先进行语法分析,对使用sql表示的查询进行语法分析,生成查询语法分析树。
  2. 语义检查:检查sql中所涉及的对象以及是否在数据库中存在,用户是否具有操作权限等
  3. 视图转换:将语法分析树转换成关系代数表达式,称为逻辑查询计划;
  4. 查询优化:在选择逻辑查询计划时,会有多个不同的表达式,选择最佳的逻辑查询计划;
  5. 代码生成:必须将逻辑查询计划转换成物理查询计划,物理查询计划不仅能指明要执行的操作,也给出了这些操作的执行顺序,每步所用的算法,存储数据的方式以及从一个操作传递给另一个操作的方式。
  6. 将DML转换成一串可执行的存取操作的过程称为束缚过程,

Mysql查询语句执行过程

这里简单介绍一下mysql数据库,mysql数据库是一款关系型数据库,所谓关系型数据库就是以二维表的形式存储数据,使用行和列方便我们对数据的增删改查。

  这篇博客,我们以mysql数据库为例,对一条sql语句的执行流程进行分析。(本篇博客不涉及到表连接)

  首先,创建一张student表,字段有自增主键id,学生姓名name,学科subject,成绩grade

  建表语句:

DROP TABLE IF EXISTS student;
CREATE TABLE `student` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) DEFAULT NULL,
  `subject` varchar(10) DEFAULT NULL,
  `grade` double(4,1) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8;

  初始化数据:

INSERT INTO student(`name`,`subject`,grade)VALUES('aom','语文',88);
INSERT INTO student(`name`,`subject`,grade)VALUES('aom','数学',99);
INSERT INTO student(`name`,`subject`,grade)VALUES('aom','外语',55);

INSERT INTO student(`name`,`subject`,grade)VALUES('jack','语文',67);
INSERT INTO student(`name`,`subject`,grade)VALUES('jack','数学',44);
INSERT INTO student(`name`,`subject`,grade)VALUES('jack','外语',55);

INSERT INTO student(`name`,`subject`,grade)VALUES('susan','语文',56);
INSERT INTO student(`name`,`subject`,grade)VALUES('susan','数学',35);
INSERT INTO student(`name`,`subject`,grade)VALUES('susan','外语',77);

INSERT INTO student(`name`,`subject`,grade)VALUES('alice','语文',88);
INSERT INTO student(`name`,`subject`,grade)VALUES('alice','数学',77);
INSERT INTO student(`name`,`subject`,grade)VALUES('alice','外语',100);

INSERT INTO student(`name`,`subject`,grade)VALUES('rajo','语文',33);
INSERT INTO student(`name`,`subject`,grade)VALUES('rajo','数学',55);
INSERT INTO student(`name`,`subject`,grade)VALUES('rajo','外语',55);

复制

下面我们来看一下,数据在数据库中的存储形式。

  (图1.0)

现在针对这张student表中的数据提出一个问题:要求查询出挂科数目多于两门(包含两门)的前两名学生的姓名,如果挂科数目相同按学生姓名升序排列。

下面是这条查询的sql语句

SELECT `name`,COUNT(`name`) AS num FROM student WHERE grade < 60 GROUP BY `name` HAVING num >= 2 ORDER BY num DESC,`name` ASC LIMIT 0,2;

复制

执行结果:

  图(1.1)

以上这条sql语句基本上概括了单表查询中所有要注意的点,那么我们就以这条sql为例来分析一下一条语句的执行流程。

1,一条查询的sql语句先执行的是 FROM student 负责把数据库的表文件加载到内存中去,如图1.0中所示。(mysql数据库在计算机上也是一个进程,cpu会给该进程分配一块内存空间,在计算机‘服务’中可以看到,该进程的状态)

  图(1.2)

2,WHERE grade < 60,会把(图1.0)所示表中的数据进行过滤,取出符合条件的记录行,生成一张临时表,如下图所示。

  图(1.3)

3,GROUP BY `name`会把图(1.3)的临时表切分成若干临时表,分为四个分组,我们用下图来表示内存中这个切分的过程。

  图(1.4)              图(1.5)         图(1.6)        图(1.7)

4,SELECT 的执行读取规则分为sql语句中有无GROUP BY两种情况。

  (1)当没有GROUP BY时,SELECT 会根据后面的字段名称对内存中的一张临时表整列读取。

  (2)当查询sql中有GROUP BY时,会对内存中的若干临时表分别执行SELECT,而且只取各临时表中的第一条记录,然后再形成新的临时表。这就决定了查询sql使用GROUP BY的场景下,SELECT后面跟的一般是参与分组的字段和聚合函数,否则查询出的数据要是情况而定。另外聚合函数中的字段可以是表中的任意字段,需要注意的是聚合函数会自动忽略空值。

  我们还是以本例中的查询sql来分析,现在内存中有四张被GROUP BY `name`切分成的临时表,我们分别取名为 tempTable1,tempTable2,tempTable3,tempTable4分别对应图(1.4)、图(1.5)、图(1.6),图(1.7)下面写四条”伪SQL”来说明这个查询过程。

SELECT `name`,COUNT(`name`) AS num FROM tempTable1;
SELECT `name`,COUNT(`name`) AS num FROM tempTable2;
SELECT `name`,COUNT(`name`) AS num FROM tempTable3;
SELECT `name`,COUNT(`name`) AS num FROM tempTable4;

复制

最后再次成新的临时表,如下图:

  图(1.8)

5,HAVING num >= 2对上图所示临时表中的数据再次过滤,与WHERE语句不同的是HAVING 用在GROUP BY之后,WHERE是对FROM student从数据库表文件加载到内存中的原生数据过滤,而HAVING 是对SELECT 语句执行之后的临时表中的数据过滤,所以说column AS otherName ,otherName这样的字段在WHERE后不能使用,但在HAVING 后可以使用。但HAVING的后使用的字段只能是SELECT 后的字段,SELECT后没有的字段HAVING之后不能使用。HAVING num >= 2语句执行之后生成一张临时表,如下:

  图(1.9)

6,ORDER BY num DESC,`name` ASC对以上的临时表按照num,name进行排序。

7,LIMIT 0,2取排序后的前两个。

转存失败重新上传取消

以上就是一条sql的执行过程,同时我们在书写查询sql的时候应当遵守以下顺序。

SELECT XXX FROM XXX WHERE XXX GROUP BY XXX HAVING XXX ORDER BY XXX LIMIT XXX;

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

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

相关文章

(业务向) 数据分析知识 + 产品

数据分析方法 趋势分析法、对比分析法、多维分解法、用户细查、漏斗分析、留存分析、AB测试法、4P理论、PESTEL理论、SWOT分析、5W2H理论、逻辑树理论、用户使用行为理论、AARRR模型 数据指标体系 1. 概述 指标&#xff0c;是反映某种事物或现象&#xff0c;描述在一定时间和…

MAE(Masked Autoencoders) 详解

MAE详解 0. 引言1. 网络结构1.1 Mask 策略1.2 Encoder1.3 Decoder2. 关键问题解答2.1 进行分类任务怎么来做&#xff1f;2.2 非对称的编码器和解码器机制的介绍2.3 损失函数是怎么计算的&#xff1f;2.4 bert把mask放在编码端&#xff0c;为什么MAE加在解码端&#xff1f; 3. 总…

chatgpt赋能python:Python做词云:从入门到精通

Python做词云&#xff1a;从入门到精通 如果你对数据可视化有所追求&#xff0c;那么词云图一定会是你的首选之一。Python作为一种常用的编程语言&#xff0c;在这个领域也有着广泛的应用。本文将介绍Python做词云的方法&#xff0c;从入门到精通&#xff0c;让你轻松掌握这一…

伍尔特IT公司利用SNP软件实现SAP系统现代化

近日&#xff0c;SAP生态伙伴中的自动化数据迁移和数据管理软件提供商SNP公司&#xff0c;正在支持伍尔特IT公司&#xff08;Wrth IT&#xff09; 向SAP S/4HANA转型。伍尔特集团的全球IT服务提供商计划首先整合其现有的ECC系统&#xff0c;然后进行标准化&#xff0c;最后将清…

数据结构与算法课程设计---最小生成树的应用

文章目录 一.课题概述1.问题2.分析3.目标 二.图的实现1.图的存储结构2.图的基本操作2.1添加顶点2.2添加边弧2.3Kruskal算法2.4Prim算法 三.堆的实现1.堆的概念及结构2.堆的基本操作2.1入堆&#xff08;向上调整算法&#xff09;2.2出堆&#xff08;向下调整算法&#xff09; 四…

【PWN · ret2libc】[CISCN 2019东北]PWN2

虽然最近的ret2libc的做题基本一致&#xff08;毕竟类型都是ret2libc嘛&#xff09;&#xff0c;但是对于本蒟蒻现阶段来说&#xff0c;还是有必要记录一下的 前言 持续巩固ret2libc的做题范式/基本套路能力&#xff0c;同时也发现&#xff0c;reverse与pwn密不可分的联系。 一…

chatgpt赋能python:Python做表格的优势及应用

Python做表格的优势及应用 在数据处理与可视化的领域&#xff0c;表格是最常见的形式之一&#xff0c;也是经常被用来展示数据的有效方式。Python作为一种流行的编程语言&#xff0c;在数据处理方面有着强大的功能&#xff0c;同时也提供了许多生成表格的库与工具。本文将会介…

Zotero的安装与数据同步

一、Zotero的下载与安装 对于需要通过大量阅读期刊论文的学生而言如何提高阅读的效率以及论文管理能力是及其重要的&#xff0c;这里我推荐科研萌新们从Zotero入手&#xff0c;因为Zotero相对于Endnote、NoteExpress这类付费文献管理工具&#xff08;大多数的高校都购买了这类软…

python web开发(三)—— CSS样式

文章目录 概要1.快速了解2.使用方式3. CSS选择器4. 多个属性类联合使用 样式1. 高度和宽度2. 块级和行内标签3. 字体设置4. 文字对齐方式5. 浮动6. 内边距7.外边距8. 内容居中9.body标签10. hover(伪类)11. 设置透明度12. after(伪类)13. position14. 边框border15. 背景色back…

SSH服务详解

1 SSH服务 1.1 SSH服务协议 SSH 是 Secure Shell Protocol 的简写&#xff0c;由 IETF 网络工作小组&#xff08;Network Working Group )制定&#xff1b;在进行数据传输之前&#xff0c;SSH先对联机数据包通过加密技术进行加密处理&#xff0c;加密后在进行数据传输。确保…

机器学习集成学习——Adaboost分离器算法

系列文章目录 机器学习之SVM分类器介绍——核函数、SVM分类器的使用 机器学习的一些常见算法介绍【线性回归&#xff0c;岭回归&#xff0c;套索回归&#xff0c;弹性网络】 机器学习相关概念思维导图 文章目录 系列文章目录 前言 Adaboost算法的简单介绍 Adaboost算法相…

如何将Chrome浏览器重置为默认设置?

如何将Chrome浏览器重置为默认设置&#xff1f; 将 Chrome 设置重置为默认设置 您可随时在 Chrome 中恢复您的浏览器设置。如果所安装的应用或扩展程序在您不知情的情况下更改了设置&#xff0c;那么您可能需要这样做。不过&#xff0c;您保存的书签和密码不会被清除或更改。 …

数据库 期末复习(4) 概念数据库的设计

参考资料 :邹老师数据库课件 程老师数据库课件 战老师数据库课件 第一部分 为啥要引入概念数据库 感觉只有一个重点 实体联系模型----ER模型 第二部分-----实体联系模型 这个例子可以全看完之后再来看 举个例子:根据COMPANY数据库的需求来构造数据库模式&#xff1a;The com…

工业控制系统的设备如何加密防勒索病毒

场景描述 信息化时代发展迅速&#xff0c;数据防泄露一词也频繁的出现在我们身边。无论企业或政府单位&#xff0c;无纸化办公场景越来越多&#xff0c;数据泄露的时间也层出不穷。例如&#xff1a;世界最大职业中介网站Monster遭到黑客大规模攻击&#xff0c;黑客窃取在网站注…

Flume的安装和使用

安装Flume 1.1访问Flume的官网&#xff08;http://flume.apache.org/download.html&#xff09;&#xff0c;下载Flume安装apache-flume-1.9.0-bin.tar.gz。或者下载我的百度网盘资源。把安装文件解压缩到windows操作“D:\”目录下&#xff0c;然后执行如下命令测试是否安装成…

JavaEE Servlet的API详解

Servlet的API详解O(∩_∩)O~&#xff1a; 文章目录 JavaEE & Servlet的API详解1. HttpServlet抽象类1.1 init方法1.2 destroy方法1.3 service方法 2. HttpRequest接口2.1 在浏览器上显示请求首行2.2 在浏览器上显示请求header2.3 getParameter方法 - 最常用的API之一2.4 js…

【MAC】nvm安装和使用

傻瓜式使用教程如下&#xff0c;不用担心443 和 mac的文件夹权限问题 &#xff01; 1.将nvm包clone下来并克隆到nvm 文件夹中 打开终端后执行&#xff1a; git clone https://gitee.com/mirrors/nvm.git ~/.nvm2.激活nvm sudo source ~/.nvm/nvm.sh接着就可以通过nvm ls命令…

2023/6/1总结

学习CSS 动画&#xff1a; 2023-05-31 21-48-43-504 效果图&#xff1a; 2023-06-01 13-58-26-168 3D转换 3D移动&#xff1a; transform:translateX() 在x轴移动 transform:translateY() 在y轴移动 transform:translateZ() 在z轴移动 transform:translate3d(x,y,z); …

程序设计综合实习(C语言):链表的创建

一、目的 1&#xff0e;掌握单向链表的概念 2&#xff0e;掌握单向链表的创建、查找、删除方法 二、实习环境 Visual Stdio 2022 三、实习内容、步骤与要求 1&#xff0e;创建一个单向链表&#xff0c;存放10个学生的学号&#xff0c;姓名&#xff0c;并输出这种10个学生的信…

分布式锁框架-Redisson

分布式锁框架-Redisson 一、Redisson介绍二、在SpringBoot中使用Redisson三、Redisson工作原理四、Redisson使用扩展4.1、Redisson单机连接4.2、Redisson集群连接4.3、Redisson主从连接 五、分布式锁总结5.1、分布式锁特点5.2、锁的分类5.3、Redission的使用 基于Redis看门狗机…