最新要闻
- CPU-Z 2.06正式升级:大力支持中国兆芯x86处理器
- 国产虚幻5《影之刃零》火了!索尼发布会播放量第三_环球观速讯
- 2023春季中国南水北调中线有限公司招聘拟聘人员公示_全球热消息
- GeFore GPU杀进手机市场 联发科、NVIDIA合作旗舰级处理器:回应来了
- 研究发现人在打盹时最具创造力:创造性比清醒受试者多78%
- 是谁推高了榴莲价格?网友吐槽吃不起 动辄三四百块一个 有人热衷开盲盒-速读
- 佛山南海:明年6月底前完成全区初高中在校学生脊柱侧弯全员筛查 天天信息
- 环球讯息:人类一败涂地 60万年薪的高级工作可被AI取代:成本只要2000多
- 机票价格仅919元 国产大飞机C919首航在即:万亿航空市场开启|天天日报
- 方力钧画袁老后续处理结果 个人简历家庭背景最贵的画价值多少具体情况详细内容介绍 全球新要闻
- 热点在线丨出门倒车疑油门当刹车倒进村河 一家4口不幸身亡:网友叹息
- 32GB DDR5只要400多 内存要跌破成本了 最快7月反转 全球新要闻
- 天天快看点丨特斯拉CEO马斯克:比亚迪的产品极具竞争力
- 世界动态:苹果7月关闭我的照片流服务:用户需尽快迁移iCloud
- 《崩坏:星穹铁道》营收超《原神》!上线10日吸金1亿美元|当前速讯
- 亚运走进三江源 携手辉映生态之光 天天观点
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
今日观点!MySQL的SQL语句执行流程(简述)
导言:
MySQL和服务器端对接的时候,我们知道一般就是服务器端会打包一些SQL命令去增删改查数据库,这个打包的数据库SQL语句数据包一般为4MB,再大一些就不会被数据库端接收了
但是我们可以自己更改默认大小,当数据包到达数据库端以后,它们会经历那些操作然后返回结果给服务器端呢?
(资料图片)
大概有:查询缓存,SQL解析,预处理器,SQL优化器,执行器,存储引擎,返回结果给服务器端
上面就是sql命令的整体执行流程,接下来我们对各个步骤进行拆分,细化的讲解一下他们都做了些什么操作
一.连接
在服务器端和数据库端的连接方式中,我们采用的是半双工的方式,也就是说要么是一次申请到达数据库端,要么是一次结果响应到服务器端
不存在一个数据包还没全部到数据库端,它的结果已经开始响应到服务器的情况
另外,作为第三方连接,我们一般都是使用的数据库连接池,数据库端一般会提供很多的连接接口,供服务器端不同的用户去连接,使用完了然后释放
既然作为第三方连接,它就会使用到数据库驱动,就像JDBC,C3P0等等
此外,数据库一次接收服务器端发来的数据包大概有4MB,多了它就选择不接受了,当然我们也可以自己更改默认接收包的大小
在数据查询完了,返回结果给服务器端也是,它只能一次全部接收,不能只接受一部分结果响应
二.查询缓存
MySQL的缓存是一个很鸡肋的东西,它很少用,但是要想了解底层就必须知道它,它的存在很鸡肋,也导致使用它的很少
数据缓存指的是对已经查询过的数据放在缓存中,下次sql命令来了以后先查询缓存中有没有已经查过的,没有才会去执行新的一次查询,有则直接返回给服务器端
缓存的构成是Map集合,他有两个属性组成,key和value ,key用来存放sql语句,而value用来存放查询的结果
看起来使用缓存会提升查询的效率,但是真正到实战开发以后就会知道,它并没有那么好用,首先一般我们的查询语句都是不同的,很难连续两次的sql完全一样,最好的情况也是条件相差不大
但是也是达不到完全吻合key值的sql,所以实战开发使用效率十分低,伴随着的就是它的缺点,因为它是sql执行的第一个操作,每个sql进来的都要去找一遍,但是都是找不到的
白白的浪费了这么多的开销,而且每一次对数据库的增删改都会影响这个缓存,使其失效,维护又是很大的开销
所以在MySQL 5.7版本是默认关闭这个缓存的,他会跳过查询缓存这一步直接sql解析,到了MySQL8.0的时候直接把查询缓存删掉了,不再需要这个功能了
三.SQL解析
sql解析执行包括了:词法分析,语法分析,分析机,生成语法树
词法分析:从左到右一个字符、一个字符地输入,然后根据构词规则识别单词。将会生成Token词
在进行了词法分析以后,他会把sql默认扫描成两个部分,一个是关键字(select,insert,from,where,group by .......)一个是非关键字(查询的字段,查询的表,查询的筛选条件,分组条件)
语法分析,分析机:它们两个是一起工作的,它们对词法分析生成的Token词开始循环构造语法树,直到整个SQL语句扫描完成了,就构成了一棵语法树
值得注意的是,当MySQL中我们的关键字写错了以后会在词法分析阶段报错,当我们没有加上表名,或条件等格式错误了会在语法分析阶段报错
生成语法树:由每次分析机的输出构成
从上面的语法上树不难看出原sql语句,这就是sql分析阶段,当这一步完成以后,就会进入预处理阶段
四.预处理器
根据一些mysql规则进一步检查解析树是否合法。如检查查询的表名、列名是否正确,是否有表的权限
这一步操作目的是解决原来每一句sql都会单独解析执行的问题,后来变成了使用预处理器,对于相同的命令模板,不断的替换参数,减少对表权限和语法树是否合法的计算
生成命令模板:对于第一次进入的sql语句肯定是没有命令模板的,所以它需要参与生成命令模板 ,比如select id from student where id =1; 那么 “ select id from student where id = ” 就会成为模板
当模板生成了以后,对于student这个表,属性为id的字段,这个模板是已经检查过有没有权限的了,它在这个模板上都是有记录的
替换参数条件:这是对于有模板的情况下,我们就会直接使用参数替换的形式,把命令完成,比如这个时候有一条sql:select id from student where id = 100 ;很显然,上次我们已经生成过模板了,
就可以直接用,模板就是select id from student where id = 这个时候就只需要把参数替换掉,这次 id = 100;就把原来的 1 替换为100 ,这样做的好处就是,不用再去检查语法树合不合法了,
不用去看表是否有没有权限了,因为在生成模板的时候这些操作都是做过的了,如果模板语法树不合法,拿这次的sql也不合法,如果模板没有student表的权限,那么这次也没有
极大避免了二次计算和操作,对性能的提升非常大
经过了预处理器以后,就拿到了这句sql是否有执行的权力,即能否更改表和查询表的权力,
如果权限没有问题,那么就可以进行下一步:SQL优化
五.SQL优化器
当语法树被认为是合法的了,并且由优化器将其转化成执行计划。一条查询可以有很多种执行方式,最后都返回相同的结果。优化器的作用就是找到这其中最好的执行计划。
执行计划:mysql不会生成查询字节码来执行查询,mysql生成查询的一棵指令树,然后通过存储引擎执行完成这棵指令树并返回结果。最终的执行计划包含了重构查询的全部信息。
查询的生命周期的下一步是将一个SQL转换成一个执行计划,mysql在依照这个执行计划和存储引擎进行交互。这包含多个子阶段:解析SQL、预处理、优化SQL执行计划。这个过程中任何错误都可能终止查询。
- 查询优化器:当语法树被认为是合法的了,并且由优化器将其转化成执行计划。一条查询可以有很多种执行方式,最后都返回相同的结果。优化器的作用就是找到这其中最好的执行计划。
- 执行计划:mysql不会生成查询字节码来执行查询,mysql生成查询的一棵指令树,然后通过存储引擎执行完成这棵指令树并返回结果。最终的执行计划包含了重构查询的全部信息。
在优化器的内部,是开发者定义的许多“优化规则”来进行优化的,如关联查询重排,索引优选,连接查询重组,优化排序,优化聚合函数,提前终止查询,等价变化等;
这里我们简单来列举一下索引优选:
这个简单的例子应该可以感受到SQL优化器的作用是干什么的了,它内置很多规则,它贴合物理层,有自己的执行规则,同时又因为一些不合格的程序员写的sql不合规
这就导致SQL优化器非常重要了,能到sql优化器处理的sql基本上语法都是没问题的,主要的是怎么提高sql的执行效率,这就是优化器最大的作用
只要SQL优化器处理完了以后,就会生成执行计划,这个执行计划就是存储引擎的处理单元
生成执行计划以后,他就会交给执行器,去调用存储存储引擎的相应Headler API来完成相应的执行计划
六.执行器
这里的执行器和操作系统的操作系统差不多,都是负责调用和分发的,在sql执行中,执行器扮演两个角色
- 调用存储引擎的Headler API 处理执行计划
- 接收存储引擎返回的结果,并将它返回给服务器端
七.存储引擎(InnoDB)
我们常说的索引查询,遍历查询,临时表查询等等行为都是在存储引擎中完成的
在我前面写的MySQL之存储引擎中有写道InnoDB是如何存储数据的,主要是内存的读写速度比硬盘的快,所以有了Buffer Pool ,这里当一个查询计划来了以后,他首先会去Buffer Pool中查看是否有关这次查询的相关更新,
如果没有,我们就会直接去磁盘中刷出数据到Buffer Pool中,然后由存储引擎负责返回给MySQL执行器,最后返回给服务器端
当Buffer Pool中有关此次查询的更新时,我们需要等到存储引擎把旧的值放到undo Log(用于事务回滚的日志)中,然后就会更新Buffer Pool和把更新数据刷入到磁盘,此时就可以去根据查询条件,查询数据到Buffer Pool中,
然后返回给MySQL执行器
有关InnoDB的存储,可以去看看我以前写的博客MySQL存储之InnoDB
拓展:什么是MySQL的二阶段提交?
MySQL的二阶段提交指的是MySQL为了保证redo Log和 Binlog的一致性而产生的一种设计,把日志写入和日志提交拆分成两个阶段,保证数据写入的一致性
redo log是事务日志,Binlog是数据变更的逻辑日志,二者必须同时成功,保证记录一致,
二阶段提交指的就是:
第一阶段:在事务开始时,MySQL会把操作记录到redo log中,同时会在redo log中打上 prepare 的标志,表示在redo log中事务开始了
第二阶段:在事务完成以后,会先记录到BinLog中,然后再去redo log中标记上commit,这样就保证了redo log 和binLog的一致性
以上就是MySQL的二次提交,所以InnoDB在写入redo log并不是一次写完的,而是分成两个阶段 prepare 和 commit
对应情况:
在写入 redo log 时崩溃:两个日志中都没有数据,满足数据的一致性
在写入redo log的prepare时崩溃:由于没有打上commit 的标记,所以在Binlog中找不到对应的这个事务的id,那么就需要执行回滚操作
在写入Binlog之后崩溃:由于redo log中的事务id可以在Bin log 中可以找到(表示事务已经刷入磁盘),所以可以直接提交数据,为redo log中事务打上commit标记
关键词:
今日观点!MySQL的SQL语句执行流程(简述)
CPU-Z 2.06正式升级:大力支持中国兆芯x86处理器
国产虚幻5《影之刃零》火了!索尼发布会播放量第三_环球观速讯
2023春季中国南水北调中线有限公司招聘拟聘人员公示_全球热消息
Doris(二) -- 基本概念和数据表模型
GeFore GPU杀进手机市场 联发科、NVIDIA合作旗舰级处理器:回应来了
研究发现人在打盹时最具创造力:创造性比清醒受试者多78%
是谁推高了榴莲价格?网友吐槽吃不起 动辄三四百块一个 有人热衷开盲盒-速读
佛山南海:明年6月底前完成全区初高中在校学生脊柱侧弯全员筛查 天天信息
低代码的“钱景”——专业的事交给专业的人来做
composer的安装
connection reset by peer 发生了什么?|每日简讯
环球讯息:人类一败涂地 60万年薪的高级工作可被AI取代:成本只要2000多
机票价格仅919元 国产大飞机C919首航在即:万亿航空市场开启|天天日报
方力钧画袁老后续处理结果 个人简历家庭背景最贵的画价值多少具体情况详细内容介绍 全球新要闻
热点在线丨出门倒车疑油门当刹车倒进村河 一家4口不幸身亡:网友叹息
32GB DDR5只要400多 内存要跌破成本了 最快7月反转 全球新要闻
天天快看点丨特斯拉CEO马斯克:比亚迪的产品极具竞争力
世界动态:苹果7月关闭我的照片流服务:用户需尽快迁移iCloud
世界短讯!如何通过Python将JSON格式文件导入redis?
《崩坏:星穹铁道》营收超《原神》!上线10日吸金1亿美元|当前速讯
亚运走进三江源 携手辉映生态之光 天天观点
全球热点!Linux工作原理1简介
3W字吃透:微服务网关SpringCloud gateway底层原理和实操
红黑树_每日资讯
未来边缘计算:趋于分布式智能
AI也有焦虑症?专家:微调模型AI可供医生研究“精神病人” 每日短讯
当前播报:专家:印度人口将是中国三倍 成全球第一人口大国
余承东:华为必须造车 是和车企一起造最好的车 快看点
环球热文:接连失效!西丽、西乡旧改都未获批!
x86游戏逆向之实战游戏线程发包与普通发包的逆向 快看
全球热门:理解JS中数组的常见应用
索引与分片|今日看点
泺怎么读什么意思(泺怎么读)
头条:司机担心违法被拍拒给救护车让路 回应扣分怎么办引热议:网友吵翻
韩方称要做好亚运会不公平待遇准备 国内选手吐槽:不配说公平 韩服笑死人
环球热消息:科技股票十年回报率:英伟达105倍第一 马斯克四字回应
23 Windows Sever 201服务器系统的安装以及远程控制的设置与使用
特斯拉车顶维权女车主回应败诉:有一案胜诉 获赔2万元
很是震撼!古人吃剩的螺蛳壳堆成一座山 13个足球场大小
世界通讯!杨紫琼版观音菩萨引热议!《西游ABC》差评不断:豆瓣已5.6分
全球即时:越南大牌:Lipo柠檬味面包干8.9元/包抄底
夏日炎炎过夏“神裤”!匹克冰丝裤2.6折狂促:到手64-每日热讯
当前最新:蚂蚁庄园支付宝问答:钙片含钙量越高补钙效果越好吗
《安富莱嵌入式周报》第313期:搬运机器人,微软出的C语言手册,开源生物信号采集板,开源SMD回流焊,开源SDR无线电,汽车级机器人评估板|天天即时
天天要闻:13-分频器-奇分频
天天热点评!中国手机市场连续5个季度暴跌 越来越多手机卖不动!为啥年轻人不换新手机了?
每日时讯!4G成熟 你会升5G吗?中国移动喊话不缩减5G投入:华为等中新集采大单
定边县冯地坑镇冯地坑村扶贫互助资金协会 天天时讯
在这片生态走廊,孩子们探究生物多样性…… 即时
环球微资讯!Go 语言 map 如何顺序读取?
全球信息:DataGridView完美解决复制粘贴功能
每日热门:【环球财经】美财长把最早债务违约日期推迟到6月5日
万吨海上巨无霸!渤海湾首个千亿方大气田中心平台建成
35岁模特患厌食症去世时仅23公斤:都是为控制体重 世界播报
【天天速看料】首发3999元!小米电视音响5.1.4发布:200W低音炮、杜比全景声
当前热点-半年都不消停?你的湿疹“不一般”
获取门禁记录方式-实时获取|世界时快讯
《狂飙》片方没有为高启强报名“最佳男主角”引热议:影迷直呼可惜 到底为啥? 环球最资讯
林志颖车祸后再度开法拉利赛车 网友大赞心理素质真强大
垃圾分类全覆盖-环球聚焦
iPhone 15系列四款机模上手:全系USB-C 接口、标配灵动岛-环球滚动
SQL进阶教程读后总结与感想|全球讯息
希荻微:子公司拟减持NVTS股票-环球热讯
mol是什么单位等于多少毫克_mol是什么单位
一季度全球汽车销冠出炉:特斯拉史无前例!Model Y力压丰田卡罗拉
惠普战66六代上手:2.5k 120Hz屏真香|每日信息
全球短讯!日本人把安卓手机做成了翻盖!极致工匠 只要100多元
2018年菲尔兹奖得主:中国这么大 需要至少50个清华-当前速递
NVIDIA市值无限逼近1万亿美元!老黄一夜赚了65亿刀 世界新消息
世界热讯:中位数怎么求_中位数
微速讯:阿扎尔换凯恩!皇马热刺重磅互换,本泽马接班人敲定,扎球王走人
世界看热讯:三亚一刑释人员砍伤2人潜逃 现已被抓获归案
2023王源演唱会重庆站直播时间+入口
证券期货业网络和数据安全实验室今日授牌 全球新资讯
乐享云南|美景·西双版纳原始森林公园
世界焦点!Node翻译i18n多语言文件,1分钟生成100种语言包
因高度计算出错 导致日本“白兔号”撞上月球摔个稀碎
著名演员罗京民老师因病去世 曾出演高分电视剧《士兵突击》
舅舅党爆料 微软Xbox将在未来推出《星空》主题限定手柄与无线耳机
育碧天猫旗舰店将于6月7号停止运营 不再经营国内的衍生品销售业务
五月天演唱会于今日晚间在鸟巢举行 不少歌迷在场外听起演唱会
湖北多地遭遇暴雨 一高校学生宿舍内居然有鱼儿出没
特斯拉或向其他制造商开放部分汽车操作系统代码 与谷歌和苹果展开竞争
米哈游《崩坏:星穹铁道》手机版全球总营收已超1亿美元 超过《原神》
印度一新郎临阵脱逃 新娘狂追到20多公里外找到新郎
路过的小学生顺手把火灭了 网友:点赞机智勇敢的小少年
环球热门:骁龙影像旗舰“百花齐放”:哪一款是你的菜?
热消息:索尼Xperia 1 V为何不用一英寸主摄?背后原因揭开
环球热消息:桌面版RTX 4060 Ti啥水平?实测表现差强人意
《英雄联盟手游今日更新4.2版本 无限火力模式正式上线
《魔戒咕噜》Steam多半差评 首日仍有800人在线受苦
高精度加法(含代码)|天天快播报
《国家水网建设规划纲要》要点速览_全球微资讯
理想L系列车型推送更新:“小主人模式”上线 通讯
【聚看点】满意率超99%!小米13 Ultra站稳高端:雷军摆庆功宴
瑞松科技因信息披露违规等违规行为被上海证券交易所采取监管措施|新动态
PC、手机生态融合!Intel、腾讯一起找到了最好的路子
AMD RX 7600公版卡小翻车:6+2针电源线插不上 全球热点
99元 联想拯救者M5鼠标上架:8000 DPI、5档调节