【MySQL】SQL语句执行流程

news2024/9/28 21:30:11

目录

一、连接器 

二、 查缓存

三、分析器

四、优化器

五、执行器


一、连接器 

学习 MySQL 的过程中,除了安装,我们要做的第一步就是连接上 MySQL

在一开始我们都是先使用命令行连接 MySQL

mysql -h localhost -u root -p 你的密码

 使用这个命令连接到数据库上,首先到达的就是连接器

连接器负责的职责就是跟客户端建立连接、获取权限、维持和管理连接 

当我们使用以上命令连接到 MySQL 服务端时,服务端会对密码、用户名进行验证(MySQL 默认的数据库中的 user 表中有用户信息)

如果输入的用户名密码不正确,服务端则会返回 “Access denied for user” 

反之,则会得到以下结果:

此时的连接器会到权限表中查询你的权限信息,之后你所进行的所有操作,都将依赖与此时读取到的权限信息 

二、 查缓存

建立完连接之后,你就可以在数据库中执行各种操作了(权限范围内)

此时如果你执行的是 select 语句,则会查询缓存,如果缓存中有该语句的执行结果,则会直接返回(之前执行过的 select 语句及其结果是以 key-value 的形式缓存在内存中)

但是大多数情况下是不建议使用缓存的!!!

缓存的失效非常频繁,每次对一个表进行更新操作,这个表上的查询缓存就会直接被清空 

但是 MySQL 也提供了 “按需使用” 的方式,可以将参数 query_cache_type 设置为 OFF,关闭查询缓存;也可以是用 SQL_CACHE 显式指定:

mysql> select SQL_CACHE * from user where id = 1

需要注意的是,MySQL 5.7 版本开始默认关闭了查询缓存,因为它的性能问题和维护成本较高。在 MySQL 8.0 版本中,查询缓存被彻底移除。 

三、分析器

到了这一步,MySQL 需要知道你要做什么操作,因此需要对你的 sql 语句进行解析

分析器首先做的就是 “词法分析” 。此时 MySQL 就会识别你的 sql 语句中的字符串分别是什么?代表的是什么?

识别完之后,就会进行 “语法分析”。根据词法分析的结果,语法分析器会根据语法规则判断你的 sql 语句是否满足 MySQL 的语法

如果语法存在错误,则会报错:

出现语法错误在提示内容中就会提示第一个出现错误的内容。

四、优化器

分析器分析完以后,语法没有存在错误,则会到达优化器。

在这里,MySQL 在知道你要执行的操作了,但是在真正开始执行这些操作之前,还需要经过优化器的处理。

优化器会在表中有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。

同样的 sql 语句,如果表连接的顺序的不一致,最终的执行效率也会大不相同,而优化器的作用就是决定使用哪一种顺序方案。

 优化器优化完成后,此时才会真正执行 sql 语句

五、执行器

开始执行时,需要判断你是否有 sql 语句中的表的操作权限,如果没有,这是就会提示没有权限的错误。

如果有权限,就打开表继续执行。打开表时优化器会根据表的引擎定义去使用这个引擎提供的接口

慢查询日志有一个 rows_examined 字段,该字段表示语句执行过程中一共扫描了多少行。

在执行器每次调用引擎获取数据时累加的,但有时候执行器执行一次,引擎扫描了多行,所以两者之间并不是完全关联的 

一  叶  知  秋,奥  妙  玄  心 

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

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

相关文章

Qt (9)【Qt窗口 —— 如何在窗口中创建菜单栏和工具栏】

阅读导航 引言一、Qt窗口简介二、如何在窗口中创建菜单栏1. 创建菜单栏2. 在菜单栏中添加菜单3. 创建菜单项4. 在菜单项之间添加分割线 三、如何在窗口中创建工具栏1. 创建工具栏2. 设置停靠位置3. 设置浮动属性4. 设置移动属性 引言 在上一篇文章中,我们深入探讨了…

掌握 BM25:深入了解算法及其在 Milvus 中的应用

我们可以通过 Milvus 轻松实现 BM25 算法,将文档和查询转化为稀疏向量。然后,这些稀疏向量可用于向量搜索,根据特定查询找到最相关的文档。 信息检索算法在搜索引擎中非常重要,可确保搜索结果与用户的查询相关。 想象一下&#…

Vue2中watch与Vue3中watch对比和踩坑

上一节说到了 computed计算属性对比 ,虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时&#…

conda环境下在pycharm中调试scrapy项目

前提条件 已经创建好了conda环境已经安装好了scrapy框架项目初始化完成 编写一个爬虫脚本 import scrapyclass StackOverflowSpider(scrapy.Spider):name stackoverflowstart_urls [http://stackoverflow.com/questions?sortvotes]def parse(self, response):print("…

阿一网络安全实战演练之利用 REST URL 中的服务器端参数污染

所需知识 要解决这个实验室问题,您需要了解以下内容: 如何确定用户输入是否包含在服务器端的 URL 路径或查询字符串中。如何使用路径遍历序列尝试更改服务器端请求。如何查找 API 文档。 这些内容在我们的 API 测试学院主题中有涵盖。 进入实验室 研…

终极解决CondaValueError: Malformed version string ‘~’: invalid character(s)问题

conda 创建环境时出现: Solving environment: failed CondaValueError: Malformed version string ‘~’: invalid character(s)以下两种方法都不行时: 原因一: 添加的镜像源中,清华镜像源是https(错误)&a…

软件测试 - 测试分类(静态测试、动态测试、白盒测试、黑盒测试、灰盒测试、单元测试、集成测试、系统测试、验收测试等)

一、为什么要对软件测试进⾏分类? 软件测试是软件⽣命周期中的⼀个重要环节,具有较⾼的复杂性,对于软件测试,可以从不同的⻆度 加以分类,使开发者在软件开发过程中的不同层次、不同阶段对测试⼯作进⾏更好的执⾏和管理…

R语言管道操作详解-高效编程

引言 R语言是一种广泛应用于统计分析和图形表示的编程语言和软件环境。随着数据分析和数据科学的发展,R语言的管道操作符已经成为提高代码可读性和效率的重要工具。本文将详细介绍R语言中的管道操作符,包括它们的用途、语法和一些实用的示例。 目录 引…

手写签名怎么变成电子签名?

教大家一个快速生成有效电子签名的方法!(有效电子签名即通过正轨平台绑定了CA数字证书、防伪防盗的签名) 1.登录【微签】,点击【自己签】。 2.点【添加文件】,上传需要签名的电子文件(格式不限)…

一起学习LeetCode热题100道(46/100)

46.二叉树展开为链表(学习) 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历…

Affine Transformations仿射变换

什么是仿射变换 仿射变换(Affine Transformation)是数学和计算机图形学中的一种线性变换,它包括了平移、旋转、缩放、剪切等操作。仿射变换保留了几何图形的“仿射性质”,即平行线在变换后仍然平行,线性组合在变换后仍…

电机预测性维护模组

设备简介 本模组为了对电机进行预测性运维而开发,可以采集电机的 3 路加速度振动传感器、3 路电流(电机供电互感器输出信号)、1 路转速(电机转速)、8 路温度(PT100 温度传感器)。 模组计算振动…

一文带你看懂安全生产管理系统

通过集成多种先进技术和设备,实现对企业安全生产全过程的智能化、精细化管理。系统分为五个核心层面,各层面相互协作,共同确保企业的安全生产。 1. 数据采集层 设备终端:利用防爆终端、防爆平板、无线传感器、电子标签、定位设备、…

WinForm DataGridView整行选中并且checkbox勾选

WinForm DataGridView选中行设置 文章目录 WinForm DataGridView选中行设置添加checkbox列列和选中行效果选中行代码 添加checkbox列 列和选中行效果 选中行代码 public Basic_configuration(){InitializeComponent();...........//添加鼠标事件this.dataGridView_basic.CellMo…

node.js: mssql2019 sequelize6 es6+ ORM in vscode and WebStorm 2023.1

mssql: insert into [dbo].[tutorials]([title],[description],[published],[createdAt],[updatedAt]) values(N涂聚文,N涂聚文,0,2025-05-04,2025-05-04); go insert into [dbo].[tutorials]([title],[description],[published],[createdAt],[updatedAt]) values(Ngeovindu,N…

实战OpenCV之图像的属性

基础入门 图像的属性指的是描述图像基本信息的数据,包括但不限于:图像的尺寸、颜色通道数、像素数据类型等。这些属性对于图像处理非常重要,因为它们直接关系到如何正确地读取、处理和存储图像。常见的图像属性包括: 尺寸&#xf…

WandB 简明教程【Weights Bias】

在机器学习实验领域,调整超参数类似于微调复杂机器的旋钮和刻度盘。这些参数通常很微妙但至关重要,能够显著影响我们模型的性能和行为。WandB(权重和偏差 ) 是一个强大的在线工具集,旨在简化模型训练、评估和分析的过程。 随着我…

TCP shutdown 之后~

目录 摘要 1 API 2 shutdown(sockfd, SHUT_WR) 3 shutdown(sockfd, SHUT_WR) 4 kernel 是怎么做的? 附 摘要 通过 shutdown() 关闭读写操作,会发生什么?具体点呢,考虑两个场景: 场景一:C 发送数据完毕…

VBA技术资料MF184:图片导入Word添加说明文字设置格式

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…

C ++初阶:C++入门级知识点

🍺0.前言 言C之言,聊C之识,以C会友,共向远方。各位博友的各位你们好啊,这里是持续分享C知识的小赵同学,今天要分享的C知识是C入门知识点,在这一章,小赵将会向大家展开聊聊C入门知识…