给公司妹子讲了好久,头都大了,一个SQL语句是如何执行的?

利用MyBatis自身本地缓存结合Redis实现分布式缓存 一、Redis分布式缓存的实现 1、什么是缓存? 计算机内存中的一段数据。 2、内存中数据特点 读写快 断电立即丢失 3、缓存解决了什么问题? 提高网站吞吐量(请求响应)提高, 网站运行效率快 缓存的存在是用来解决数据库访问压力 4、既然缓存能提高效率, 所有项目中都加缓存吗? 使用缓存时一定是数据库中数据极少发生修改, 更多用于查询情况, 比如地址, 省, 市, 等 5、本地缓存和分布式缓存的区别? 本地缓存 : 存在应用服务器内存中数据称之为本地缓存(Local Cache) 分布式缓 阅读详情

前言

SQL作为Web开发是永远离开不的一个话题,天天写SQL,可是你知道一个SQL是如何执行的吗?

select name from user where id = 1;

上面是一个简单的查询语句,交给数据库去执行,然后返回name。看起来很简单,可是内部的执行过程却很多人都不知道。

今天就把MySQL拆开看看,看一下它究竟是怎么工作的。

SQL基本架构

给公司妹子讲了好久,头都大了,一个SQL语句是如何执行的?

从上图可以看出,MySQL分为Server层和存储引擎层

Server层

连接器

连接器主要是与客户端建立连接, 包含本地socket和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信。 连接成功之后会同时校验用户的权限,等相关安全方案。如我们常用的建立连接方式

mysql -h ip -P 3306 -u root -p

连接是可以在-p后面输入密码,但是考虑到安全问题 不建议这样操作,-P 后是端口号,-p 是密码。注意大小写。

登录成功之后,会校验当然登录账号的权限。后续所有的数据库操作都被当前权限所限制。因此,管理员修改用户权限时,不会立即生效,需要重新连接才会生效。

MySQL默认情况下,当一个链接空闲超过8(60 * 60 * 8)小时之后会自动断开连接。但是连接池则以为该被断开的连接依然有效。 这个时候如果客户端代码发送请求时,连接池会把已经失效的代码返回至客户端。这样就会导致代码异常。

通过show global variables like '%timeout%'可进行查看, 缺省情况下是使用wait_timeout 这个字段。

给公司妹子讲了好久,头都大了,一个SQL语句是如何执行的?

另外可以用show processlist; 用来显示用户正在运行的线程。

注意:除了 root 用户能看到所有正在运行的线程外,其他用户都只能看到自己正在运行的线程,看不到其它用户正在运行的线程。除非单独个这个用户赋予了PROCESS 权限。

mysql> show processlist;
+----+-----------------+-----------+------+---------+------+------------------------+------------------+
| Id | User            | Host      | db   | Command | Time | State                  | Info             |
+----+-----------------+-----------+------+---------+------+------------------------+------------------+
|  4 | event_scheduler | localhost | NULL | Daemon  |  461 | Waiting on empty queue | NULL             |
| 13 | root            | localhost | NULL | Query   |    0 | starting               | show processlist |
+----+-----------------+-----------+------+---------+------+------------------------+------------------+

查询缓存

当我们建立连接之后,执行SQL语句时,会先进行缓存查询(如果开启了缓存查询)。如果之前执行了相同的SQL语句,则会从缓存中直接返回结果。 这个过程可以理解为SQL文本和查询结果的映射。

但是查询缓存真的能提升效率吗? 理论上,不建议开启查询缓存

因为缓存和失效都会有额外的资源消耗,数据发生改变或者表结构发生改变时,都会导致缓存失效。最差的情况就是你刚建立了一份缓存,另外一边又有人修改数据。这样导致缓存失效,重新建立了一份新的缓存。

**有这些INSERT、UPDATE、 DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE会导致缓存数据失效。所以查询缓存适合有大量相同查询的应用,不适合有大量数据更新的应用 **

在MySQL8.0的版本删除了查询缓存的功能。

如果你是8.0之前的版本,可以通过以下方法关闭查询缓存:

1、临时关闭,直接执行命令行

set global query_cache_size=0

set global query_cache_type=0

2、永久关闭,修改配置文件my.cnf ,添加下面的配置即可。

query_cache_type=0

query_cache_size=0

分析器

当在查询缓存中没有找到对象的查询结果时,这时候就需要分析器对SQL进行解析。比如解析出响应的关键词。如Select(查询)、Delete(删除)等等,同时也会把相应的表明、字段名都分析出来。如果SQL语法错误,会告诉我们You have an error in your SQL syntax

优化器

SQL实际的执行顺序不一定就是我们写的顺序。在通过分析器的解析,数据库知道了我们要做什么。然后会按照一定的规则重写SQL。当有多个索引的时候,优化器也会决定去使用哪个索引;当多表关联查询的时候,也会去决定各个表的链接顺序。总之,优化器会通过一系列的算法规则去给出一个最优的执行策略。

执行器

SQL通过分析器知道要做什么,通过优化器知道该怎么做。最后通过执行器就进入了执行阶段。

首先会根据连接的账号查看是否有操作该表的权限。如果没有,则返回权限错误。如果有权限,则继续执行。

打开表的时候,执行器会根据表的引擎 去使用该引擎提供的接口。

存储引擎层

存储引擎层负责数据的存储和提取。

可通过show engines查看MySQL的存储引擎。存储引擎有InnoDB、MylSAM、MEMORY、MERGE等等。

给公司妹子讲了好久,头都大了,一个SQL语句是如何执行的?

但是我们常用的基本是InnoDB和MylSAM。

InnoDB在5.5.5版本之后为默认的存储引擎

InnoDB

InnoDB是一个事务型的存储引擎,有行级锁定和外键约束,提供了具有提交,回滚和崩溃恢复的事务安全,但是对比MyLSAM引擎,写的效率会比差一些,并且会占用更多的磁盘空间以保持数据和索引。

特点:

  1. 更新多的表,适合处理多重并发的更新请求。
  2. 支持事务。
  3. 可以从灾难中恢复(通过bin-log日志等)。
  4. 外键约束。只有他支持外键。
  5. 支持自动增加列属性auto_increment。

MylSAM

Mylsam 存储引擎独立于操作系统,简单说就是可用在windows上使用,也可用将数据转移到Lunex操作系统上。系统兼容性很好!!!。这种存储引擎在建表的时候,它会创建3个文件。分别是(.frm, .MYD, .MYI),简单说明一下:.frm 存储表的定义(也就是表结构啦),.MYD 就是表里面的数据,.MYD存储索引。这样的划分操作系统对大文件的操作是比较慢的,这样将表分为三个文件,那么.MYD这个文件单独来存放数据自然可以优化数据库的查询等操作。

特点:

1、不支持事务

2、不支持外键

3、查询速度很快。如果数据库insert和update的操作比较多的话采用表锁效率低(建议使用innodb)。

4、对表进行加锁

总结

Server层涵盖了MySQL执行的大多数的核心功能,以及各种各样的内置函数,比如时间、日期等,不管使用的是什么存储引擎,它的Server层是一样的。以上就是对一个SQL执行流程的简单介绍。感谢大家的阅读!

Mysql 极客 锁(全局锁、表级锁和行锁) 全局锁 :是对整个数据库实例加锁,。MySQL 提供了一个加全局读锁的方法,命令是 Flush tables with read lock (FTWRL)。数据库只读 使用场景:做全库逻辑备份(不加锁的话,备份系统备份的得到的库不是一个逻辑时间点,这个视图是逻辑不一致的) 可以通过一致性读解决,一致性读是好,但前提是引擎要支持这个隔离级别。比如,对于 MyISAM 这种不支持事务的引擎 表级别的锁有两种:一种是表锁(表锁的语法是 lock tables … read/w 阅读详情

相关推荐

AI视频生成技术研究报告:现状、挑战与展望

AI 视频生成技术概述:介绍 AI 视频生成技术的基本概念,回顾其发展历程,从早期依赖图像拼接的简单生成方式,到如今融合多种先进技术的复杂模型应用,梳理技术演进的关键节点和重要突破。同时,分析该技术在当前阶段的特点,包括生成视频的质量、速度、灵活性等方面,以及与传统视频制作方式的差异,阐述 AI 视频生成技术如何改变视频创作的流程和模式。技术实现路径分析。

daqsdfas的博客 4570

MySQL的缓存机制

一、查询缓存 为什么MySQL8.0直接把查询缓存的功能删除了呢? 一种说法是不建议使用查询缓存。因为查询缓存往往弊大于利。 1. 什么是查询缓存? MySQL查询缓存即缓存查询数据的SQL文本及查询结果,用Key-Value的形式保存在服务器内存中。当查询命中缓存,MySQL会立刻返回结果,跳过了解析,优化和执行阶段。 2. 查询缓存的命中条件有哪些? 首先你得确保开启了查询缓存。(手动狗头 MySQL将缓存存放在一个引用表(类似HashMap的数据结构)。通过一个哈希值索引,这个索引通过查询本身、当前

技术是修行,跑步亦是修行。 4425

OpenHarmony-AI调研

基于OpenHarmony-5.0.0版本以及laval社区等网络资料调研当前OH上的AI发展情况。

qqq1112345的博客 1367

MySQL优化之引擎与查询缓存(三)

MySQL优化之引擎与查询缓存(三) 我们首先要了解为什么要用引擎: MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。 这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。MySQL默认...

SKY_PLA的博客 1265

手机流畅的秘密:拆解LPDDR5X在骁龙8 Gen2平台上的电源与信号完整性设计

本文深入解析了LPDDR5X内存与骁龙8 Gen2处理器在旗舰手机中的协同设计,重点探讨了0.5V超低电压下的电源完整性设计以及8.5Gbps高速传输中的信号完整性挑战。通过详细的电源树架构、关键器件选型和布线策略分析,揭示了如何实现高性能与低功耗的完美平衡,为手机流畅体验提供硬件保障。

weixin_30235225的博客 483

十五、【测试执行篇】异步与并发:使用 Celery 实现测试任务的后台执行与结果回调

本文介绍如何使用Celery实现测试任务的异步执行与结果回调,解决同步执行测试计划导致的请求阻塞问题。主要内容包括:Celery的基本概念与工作原理(任务队列、消息中间件、Worker进程),在Django项目中集成Celery的步骤,以及将同步测试逻辑改造为异步任务的方法。

blues_C的博客 706

【MySQL】聊一聊MySQL的缓存机制

MySQL查询缓存是MySQL中比较独特的一个缓存区域,用来缓存特定Query的整个结果集信息,且共享给所有客户端。为了提高完全相同的Query语句的响应速度,

A-Itfuture的博客 6940

基于逆向工程的中国裁判文书网爬虫技术深度解析

本文详细介绍了中国裁判文书网爬虫的开发过程,涵盖了从基础爬取到高级功能的完整解决方案。逆向工程分析:理解网站的反爬机制和加密逻辑浏览器自动化:使用Playwright模拟真实用户行为参数加密:通过JavaScript执行环境生成加密参数智能调度:控制请求频率,避免被检测错误处理:完善的异常处理和重试机制。

2201_76125261的博客 2144

.sql文件如何执行_给公司妹子讲了好久,头都大了,一个SQL语句是如何执行的?...

前言SQL作为Web开发是永远离开不的一个话题,天天写SQL,可是你知道一个SQL是如何执行的吗?select name from user where id = 1;上面是一个简单的查询语句,交给数据库去执行,然后返回name。看起来很简单,可是内部的执行过程却很多人都不知道。今天就把MySQL拆开看看,看一下它究竟是怎么工作的。SQL基本架构从上图可以看出,MySQL分为Server层和存储引...

weixin_39538693的博客 120

华为OD机试真题 Java&Go 实现【优雅子数组】【100%通过率】【2022.11 Q4 新题】

如果一个数组中出现次数最多的元素出现大于等于K次,被称为K -优雅数组,k也可以被称为优雅阈值。例如,数组1,2,3,1、2,3,1,它是一个3-优雅数组,因为元素1出现次数大于等于3次,数组1,2,3,1,2就不是一个3-优雅数组,因为其中出现次数最多的元素是1和2,只出现了2次。给定一个数组A和k,请求出A有多少子数组是k-优雅子数组。

MISAYAONE的博客 1万+

算法 | A*算法实现最优路径规划

启发式探索是利用问题拥有的启发信息来引导搜索,达到减少探索范围、降低问题复杂度的目的。A*寻路算法是启发式探索的一个典型实践,在寻路搜索的过程中,给每个节点绑定了一个估计值(即启发式),在对节点的遍历过程中采取估计值优先原则,估计值更优的节点会被优先遍历。...

不断学习,不断进步,提高自己 6629

2008 r2彻底删除 server sql_给公司妹子讲了好久,头都大了,一个SQL语句是如何执行的?...

前言SQL作为Web开发是永远离开不的一个话题,天天写SQL,可是你知道一个SQL是如何执行的吗?select name from user where id = 1;上面是一个简单的查询语句,交给数据库去执行,然后返回name。看起来很简单,可是内部的执行过程却很多人都不知道。今天就把MySQL拆开看看,看一下它究竟是怎么工作的。SQL基本架构从上图可以看出,MySQL分为Server层和存储引...

weixin_33603111的博客 112

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

给隔壁的妹子讲『一个SQL语句是如何执行的?』

前言 SQL作为Web开发是永远离开不的一个话题,天天写SQL,可是你知道一个SQL是如何执行的吗? select name from user where id = 1; 上面是一个简单的查询语句,交给数据库去执行,然后返回name。看起来很简单,可是内部的执行过程却很多人都不知道。 今天就把MySQL拆开看看,看一下它究竟是怎么工作的。 SQL基本架构 从上图可以看出,MySQL分为Server层和存储引擎层 Server层 连接器 连接器主要是与客户端建立连接, 包含本地socket和大多数基于客

胖虎 1231

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

.sql文件如何执行_给隔壁的妹子讲「一个SQL语句是如何执行的?」

前言SQL作为Web开发是永远离开不的一个话题,天天写SQL,可是你知道一个SQL是如何执行的吗?select name from user where id = 1;上面是一个简单的查询语句,交给数据库去执行,然后返回name。看起来很简单,可是内部的执行过程却很多人都不知道。今天就把MySQL拆开看看,看一下它究竟是怎么工作的。SQL基本架构从上图可以看出,MySQL分为Server层和存储引...

weixin_39749501的博客 207

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

.sql文件如何执行_给隔壁的妹子讲『一个SQL语句是如何执行的?』

前言SQL作为Web开发是永远离开不的一个话题,天天写SQL,可是你知道一个SQL是如何执行的吗?select 上面是一个简单的查询语句,交给数据库去执行,然后返回name。看起来很简单,可是内部的执行过程却很多人都不知道。今天就把MySQL拆开看看,看一下它究竟是怎么工作的。SQL基本架构从上图可以看出,MySQL分为Server层和存储引擎层Server层连接器连接器主要是与客户端建立连接, ...

weixin_39779032的博客 264

2016 server sql 错误53_给隔壁的妹子讲『一个SQL语句是如何执行的?』

前言SQL作为Web开发是永远离开不的一个话题,天天写SQL,可是你知道一个SQL是如何执行的吗?select name from user where id = 1;上面是一个简单的查询语句,交给数据库去执行,然后返回name。看起来很简单,可是内部的执行过程却很多人都不知道。今天就把MySQL拆开看看,看一下它究竟是怎么工作的。SQL基本架构从上图可以看出,MySQL分为Server层和存储引...

weixin_28730403的博客 115

java he sql,关于java:给隔壁的妹子讲『一个SQL语句是如何执行的』

前言SQL作为Web开发是永远来到不的一个话题,天天写SQL,可是你晓得一个SQL是如何执行的吗?select name from user where id = 1;下面是一个简略的查问语句,交给数据库去执行,而后返回name。看起来很简略,可是外部的执行过程却很多人都不晓得。【腾讯云】云产品限时秒杀,爆款1核2G云服务器,首年99元明天就把MySQL拆开看看,看一下它到底是怎么工作的。SQL根...

weixin_33497944的博客 125

查看正在执行的事务_给隔壁的妹子讲「一个SQL语句是如何执行的?」

前言SQL作为Web开发是永远离开不的一个话题,天天写SQL,可是你知道一个SQL是如何执行的吗?select name from user where id = 1;上面是一个简单的查询语句,交给数据库去执行,然后返回name。看起来很简单,可是内部的执行过程却很多人都不知道。今天就把MySQL拆开看看,看一下它究竟是怎么工作的。SQL基本架构从上图可以看出,MySQL分为Server层和存储引...

weixin_32191249的博客 86

面试杀手锏===mysql一个sql语句的执行过程

mysql 、面试杀手锏、 sql语句执行过程、常见错误

aiailingfei的博客 450

公司对门的妹子问我SQL语言是如何执行的,还好我会,要不得多丢人

前言 SQL作为Web开发是永远离开不的一个话题,天天写SQL,可是你知道一个SQL是如何执行的吗? select name from user where id = 1; 上面是一个简单的查询语句,交给数据库去执行,然后返回name。看起来很简单,可是内部的执行过程却很多人都不知道。 今天就把MySQL拆开看看,看一下它究竟是怎么工作的。 SQL基本架构 从上图可以看出,MySQL分为Server层和存储引擎层 Server层 连接器 连接器主要是与客户端建立连接, 包含本地.

如果频繁就私信一下呢 206

【EF Core】两种方法记录生成的 SQL 语句

你不要惊讶,这个公司的团队绝对少见,七个成员,四个是女的,恐怕你都找不出第二个这样的团队。咱们的代码只关心 CommandExecuting 事件,这是 DbCommand 执行之前触发的,如果是命令执行之后,会触发 CommandExecuted 事件。其实,单纯的把 LINQ 转 SQL 意义不大的,许多场景下,可能最需要的是日志功能——记录发送到数据库的 SQL 语句。这代码一旦展开是非常复杂的,你不仅要有使用 LINQ 表达式树的知识,还得看懂其思路,所以,没兴趣的话就不用看了。

shiwulou1的博客 864

图解 SQL 的执行顺序,优雅

因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享这是一条标准的查询语句:这是我们实际上SQL执行顺序:我们先执行from,join来确定表之间的连接关系,得到初步的数据where对数据进行普通的初步的筛选group by 分组各组分别执行having中的普通筛选或者聚合函数筛选。然后把再根据我们要的数据进行select,可以是普通字段查询也可以是获取聚合函数的查询结果,如果是...

1643
上一篇: 太可惜了!与字节offer擦肩而过,竟然是因为一道“算法题”!
下一篇: 太肝了!三个步骤让我一天就搞定了MySQL,顺利拿下了天猫offer!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值