【MySQL】SQL语句执行流程

目录

一、连接器 

二、 查缓存

三、分析器

四、优化器

五、执行器


一、连接器 

学习 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 字段,该字段表示语句执行过程中一共扫描了多少行。

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

一  叶  知  秋,奥  妙  玄  心 

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

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

相关文章

基于Crontab调度,实现Linux下的定时任务执行。

文章目录 引言I 预备知识Crontab的基本组成Crontab的配置文件格式Crontab的配置文件Crontab不可引用环境变量杀死进程命令II Crontab实践案例Crontab工具的使用重启tomcat服务每分钟都打印当前时间到一个文件中30s执行一次III 常见问题并发冗余执行任务&& 和|| 和 ;的区…

WebRTC音视频开发读书笔记(一)

一、基本概念 WebRTC(Web Real-Time Communication,网页即时通信)于2011年6月1日开源,并被纳入万维网联盟的W3C推荐标准,它通过简单API为浏览器和移动应用提供实时通信RTC功能。 1、特点 跨平台:可以在Web,Android、…

Windows下pip install mysqlclient安装失败

有时候安装mysqlclient插件报如下错误 提示先安装mysqlclient的依赖wheel文件 下载链接(必须对应版本,python3.6版本对1.4.4版本) 如下选择历史版本 mysqlclient官网 https://pypi.org/project/mysqlclient/python3.6对应版本 https://pypi.org/project/mysqlcl…

Unity3D 自定义窗口

Unity3D 自定义窗口的实现。 自定义窗口 Unity3D 可以通过编写代码,扩展编辑器的菜单栏和窗口。 简单的功能可以直接一个菜单按钮实现,复杂的功能就需要绘制一个窗口展示更多的信息。 编辑器扩展的脚本,需要放在 Editor 文件夹中。 菜单栏…

AI预测福彩3D采取888=3策略+和值012路或胆码测试8月19日新模型预测第61弹

经过60期的测试,当然有很多彩友也一直在观察我每天发的预测结果,得到了一个非常有价值的信息,那就是9码定位的命中率非常高,60期一共只错了6次,这给喜欢打私房菜的朋友提供了极高价值的预测结果~当然了,大部…

Ubuntu 22.04 安装 MySQL 8

Ubuntu 22.04 安装 MySQL 8 本文描述了Ubuntu安装MySQL 8的方法 CentOS7 的安装方法点击此处跳转 Windows 的安装方法点击此处跳转 Docker 的安装方法点击此处跳转 正文开始: 在一切开始之前,建议先切换到root #输入下方名,然后输入当…

openGauss 6.0安装过程解除对root用户依赖之gs_preinstall

目录 1.执行前提条件 1.1设置OS参数: 1.2定时任务权限 1.3 修改最大文件描述符 2.切换至omm用户,执行preinstall 3.source环境变量 4.执行gs_install 在给客户部署业务系统时,由于openGauss数据库的预安装过程需要用到root用户执行&am…

uniapp left right 的左右模态框

标题 这是组件 <template><div class"content-wrapper"><divv-for"(vla, i) in products":key"i":class"[content-page, getPageClass(i)]"><slot :data"vla"><!-- 用户自定义的内容 --><…

微信小程序中实现自动滚动

使用scroll-view组件的scroll-into-view属性&#xff1a; <scroll-view class"container" scroll-y"{{true}}" scroll-into-view"recordBottomScroll"><view class"text_style" style"color: #252526;">{{te…

LAMM: Label Alignment for Multi-Modal Prompt Learning

系列论文研读目录 文章目录 系列论文研读目录文章题目含义AbstractIntroductionRelated WorkVision Language ModelsPrompt Learning MethodologyPreliminaries of CLIPLabel AlignmentHierarchical Loss 分层损失Parameter Space 参数空间Feature Space 特征空间Logits Space …

JavaScript语法基础之常量与变量

目录 语法基础 1.语法简介 2 常量与变量 2.1 变量 2.1.1 变量的命名 2.1.2. 变量的使用 2.2. 常量 语法基础 注&#xff1a;由于大部分编程语言语法都差不多&#xff0c;这里讲完 PHP 部分不再讲述。 调试语句&#xff1a;prompt、alert、document.write(a)、console.l…

OSL 冠名赞助Web3峰会 “FORESIGHT2024”圆满收官

OSL 望为香港数字资产市场发展建设添砖加瓦 &#xff08;香港&#xff0c;2024 年 8 月 13 日&#xff09;- 8 月 11 日至 12 日&#xff0c; 由 香港唯一专注数字资产的上市公司 OSL 集团&#xff08;863.HK&#xff09;冠名赞助&#xff0c;Foresight News、 Foresight Ventu…

【高阶数据结构】图

图 1. 图的基本概念2. 图的存储结构2.1 邻接矩阵2.2 邻接表2.3 邻接矩阵的实现2.4 邻接表的实现 3. 图的遍历3.1 图的广度优先遍历3.2 图的深度优先遍历 4. 最小生成树4.1 Kruskal算法4.2 Prim算法 5. 最短路径5.1 单源最短路径--Dijkstra算法5.2 单源最短路径--Bellman-Ford算…

【投融界-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

leetcode198打家劫舍

题目描述 LeetCode 第 198 题——打家劫舍&#xff08;House Robber&#xff09; 你是一个职业小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;这个地方所有的房屋都围成一圈&#xff0c;并且相邻的房屋有安全系统会相连&#xff0c;如果两间相邻的…

【MySQL进阶之路】数据库的操作

目录 创建数据库 字符集和校验规则 查看数据库支持的字符集 查看数据库支持的字符集校验规则 指定字符集和校验规则 在配置文件中配置 查看数据库 显示创建语句 修改数据库 删除数据库 数据库的备份和恢复 备份整个数据库 备份特定表 备份多个数据库 备份所有数据…

linux,docker查看资源消耗总结

在linux和docker中我们将一个程序运行到后台&#xff0c;之后我们想查看它的运行状态&#xff0c;对于服务器的资源消耗等等 1.linux查看进程 ps aux | grep python ps aux&#xff1a;列出所有正在运行的进程。grep python&#xff1a;过滤出包含 python 的进程 2.linux查…

Mapreduce_Distinct数据去重

MapReduce中数据去重 输入如下的数据&#xff0c;统计其中的地址信息&#xff0c;并对输出的地址信息进行去重 实现方法&#xff1a;Map阶段输出的信息K2为想要去重的内容&#xff0c;利用Reduce阶段的聚合特点&#xff0c;对K2进行聚合&#xff0c;去重。在两阶段中&#xff…

Java之线程篇一

目录 如何理解进程&#xff1f; 进程和线程的区别 线程的优点 线程的缺点 线程异常 线程用途 创建线程 方法一&#xff1a;继承Thread类&#xff0c;重写run() 观察线程 小结 方法二&#xff1a; 实现Runnable接口&#xff0c;重写run() 方法三&#xff1a;继承Threa…

【深度学习】【语音TTS】GPT-SoVITS v2 实战,训练一个人的音色,Docker镜像

文章目录 原理Dockerdocker push训练教程: https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e/xyyqrfwiu3e2bgyk 原理 Docker 不用docker不行,不好分配显卡, 做个docker镜像: docker pull pytorch/pytorch:2.1.2