问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

详解一条sql语句在mysql中是如何执行的

发布网友 发布时间:2023-07-29 17:48

我来回答

1个回答

热心网友 时间:2024-08-03 01:38



概览

最近开始在学习mysql相关知识,自己根据学到的知识点,根据自己的理解整理分享出来,本篇文章会分析下一个sql语句在mysql中的执行流程,包括sql的查询在mysql内部会怎么流转,sql语句的更新是怎么完成的。

一、mysql架构分析

下面是mysql的一个简要架构图:



mysql主要分为Server层和存储引擎层

Server层:主要包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,函数等,还有一个通用的日志模块 binglog日志模块。

存储引擎: 主要负责数据的存储和读取,采用可以替换的插件式架构,支持InnoDB、MyISAM、Memory等多个存储引擎,其中InnoDB引擎有自有的日志模块redolog 模块。

InnoDB 5.5.5版本作为默认引擎。

连接器

主要负责用户登录数据库,进行用户的身份认证,包括校验账户密码,权限等操作,如果用户账户密码已通过,连接器会到权限表中查询该用户的所有权限,之后在这个连接里的权限逻辑判断都是会依赖此时读取到的权限数据,也就是说,后续只要这个连接不断开,即时管理员修改了该用户的权限,该用户也是不受影响的。

查询缓存

连接建立后,执行查询语句的时候,会先查询缓存,Mysql会先校验这个sql是否执行过,以Key-Value的形式缓存在内存中,Key是查询预计,Value是结果集。如果缓存key被命中,就会直接返回给客户端,如果没有命中,就会执行后续的操作,完成后也会把结果缓存起来,方便下一次调用。当然在真正执行缓存查询的时候还是会校验用户的权限,是否有该表的查询条件。

Mysql 查询不建议使用缓存,因为对于经常更新的数据来说,缓存的有效时间太短了,往往带来的效果并不好,对于不经常更新的数据来说,使用缓存还是可以的,Mysql 8.0 版本后删除了缓存的功能,官方也是认为该功能在实际的应用场景比较少,所以干脆直接删掉了。

分析器

mysql 没有命中缓存,那么就会进入分析器,分析器主要是用来分析SQL语句是来干嘛的,分析器也会分为几步:

第一步,词法分析,一条SQL语句有多个字符串组成,首先要提取关键字,比如select,提出查询的表,提出字段名,提出查询条件等等。做完这些操作后,就会进入第二步。

第二步,语法分析,主要就是判断你输入的sql是否正确,是否符合mysql的语法。

完成这2步之后,mysql就准备开始执行了,但是如何执行,怎么执行是最好的结果呢?这个时候就需要优化器上场了。

优化器

优化器的作用就是它认为的最优的执行方案去执行(虽然有时候也不是最优),比如多个索引的时候该如何选择索引,多表查询的时候如何选择关联顺序等。

执行器

当选择了执行方案后,mysql就准备开始执行了,首先执行前会校验该用户有没有权限,如果没有权限,就会返回错误信息,如果有权限,就会去调用引擎的接口,返回接口执行的结果。

二、语句分析

2.1 查询语句

说了以上这么多,那么究竟一条sql语句是如何执行的呢?其实我们的sql可以分为2中,一种是查询,一种是更新(增加,更新,删除)。我们先分析下查询语句,语句如下:



select * from tb_student A where A.age='18' and A.name='张三';
结合上面的说明,我们分析下这个语句的执行流程:

先检查该语句是否有权限,如果没有权限,直接返回错误信息,如果有权限,在mysql8.0版本以前,会先查询缓存,以这条sql语句为key在内存中查询是否有结果,如果有直接缓存,如果没有,执行下一步。
通过分析器进行词法分析,提取sql语句的关键元素,比如提取上面这个语句是查询select,提取需要查询的表名为tb_student,需要查询所有的列,查询条件是这个表的id='1'。然后判断这个sql语句是否有语法错误,比如关键词是否正确等等,如果检查没问题就执行下一步。
接下来就是优化器进行确定执行方案,上面的sql语句,可以有两种执行方案:
a.先查询学生表中姓名为“张三”的学生,然后判断是否年龄是18。
b.先找出学生中年龄18岁的学生,然后再查询姓名为“张三”的学生。

那么优化器根据自己的优化算法进行选择执行效率最好的一个方案(优化器认为,有时候不一定最好)。那么确认了执行计划后就准备开始执行了。

进行权限校验,如果没有权限就会返回错误信息,如果有权限就会调用数据库引擎接口,返回引擎的执行结果。

2.2 更新语句

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
让你狂吃吃不够的原因是什么 属鸡4月出生好,农历四月属鸡的生肖怎么样 农历4月出生属鸡人命好吗 小家电保多久 小家电使用寿命大揭秘 三方协议 随便盖个章可以么 代表建议取消1至3年级家庭作业 是否真能落实 为什么有的学校录取分数线提前批比本科一批还高 提前批次录取分数高吗 如果提前批分数低是不是普通本科批就低 提前批和本科一批录取线相差多少 教你如何在MySQL命令行中使用SQL语句的规则_MySQL mysql需要注意的几个sql语句_MySQL 全民小镇工坊建造设计推荐 40级后小镇布局 全民小镇神秘金字塔布局攻略 摆法详解分享 上联勤能补拙是良训请写下联 勤学勤练勤动手勤能补拙的下联 求对联, 上联:勤能怎样 下联:善又怎样 第一个字上联要勤开头 下联要善... 勤能补拙 征下联 中草药煎制后浓缩的方法,是否能做成水丸? 苹果圆球在哪里设置 探探对方解除怎么找回 梦见自己挖青草 炒面的结构炒面的结构是什么 在哪里找对象靠谱一些? 网上在哪里找对象比较靠谱啊?不要那种yp的 想买柜式空调放在客厅,要变频还是定频的呀? 格力立试空调,是变频的好,还是定频的好 如果把吉林队的琼斯给广东,CBA是否会迎来大结局? 义战龙城开服活动有些什么? 布艺婴儿鞋手工制作教程? 在天空中的飞机怎么画重力图 尿不湿还是尿布湿哪一个字正确 0.3cm的胆管结石吃中药能排除吗? 尿不湿还是尿布湿好呢?有些纠结,不知道给宝宝用哪一种好。 命运冠位指定速刷阵容推荐 小莫+小黑+龙娘3t+队_Fate/Grand Order手游攻... 亲妈滤镜是什么梗 经常平躺睡觉对胸椎有影响吗? 传国玉玺和九州鼎现在在哪 历史上的“九鼎”和“传国玉玺”,哪一个更珍贵 这些雨天开车注意项要知道? 丹东东东港大桥总长多少米 超级电视zero65的壁画模式是什么样的? 有通过的吗? 乐视电视zero65真的和壁画一样的吗? 乐视超级电视zero65据说通体超薄,很好看。怎么散热? letv超级电视新出的zero 65电视有MEMC动态补偿功能吗 乐视电视zero65对于儿童的内容多吗? 从四个多月的时候就打了点滴,后来就每个月都感冒,一感冒就打点滴,一打... 吃了猪草大肠颜色变深 我是中专生如果我一直读成人教育并积累足够实践经验我能读Mba吗? 狗狗咬主人的手,主人骂了它,它用鼻子碰主人的嘴怎么回事