mysql调用存储过程不报错也不执行_一条sql语句究竟是如何执行的

mysql调用存储过程不报错也不执行_一条sql语句究竟是如何执行的

mysql sql语句优化总结

相信做后端的同学肯定离不开一个话题,就是 mysql,大家也花式的执行过各种各样的 sql 语句,然后得到返回结果,那么一条 sql 语句执行究竟经历了哪些步骤呢?今天让我们来一探究竟。

我们先来看一看 mysql 的整体的架构图

mysql sql语句优化总结

其实从上图可以看出,由客户端发出请求之后,mysql主要分为层和存储引擎层

层连接器

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

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

只要用过数据库的同学,相信对上面的连接方式并不陌生,在连接之后还有一些权限验证等等,这些都是在连接器中完成的。

mysql sql语句优化总结

这里需要注意的一点就是,在线上的应用中,会采用数据库连接池的方式,来避免频繁的开关连接。

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

分析器

对客户端传来的 sql 进行分析,这将包括预处理与解析过程,并进行关键词的提取、解析,并组成一个解析树。具体的解析词包括但不局限于 ///or/in/where/group by//count/limit 等,如果分析到语法错误,会直接抛给客户端异常:

  ERROR:You have an error in your SQL syntax.

比如:

select * from user where userId =1234;

在分析器中就通过语义规则器将 from where这些关键词提取和匹配出来,mysql会自动判断关键词和非关键词mysql sql语句优化总结,将用户的匹配字段和自定义语句识别出来。这个阶段也会做一些校验:比如校验当前数据库是否存在user表,同时假如User表中不存在这个字段同样会报错:

unknown column in field list

优化器

mysql sql语句优化总结

进入优化器说明sql语句是符合标准语义规则并且可以执行。优化器会根据执行计划选择最优的选择,匹配合适的索引,选择最佳的方案。比如一个典型的例子是这样的:

表T,对A、B、C列建立联合索引(A,B,C)mysql sql语句优化总结,在进行查询的时候mysql sql语句优化总结,当sql查询条件是: xx where B=x and A=x and C=x.很多人会以为是用不到索引的,但其实会用到,虽然索引必须符合最左原则才能使用,但是本质上,优化器会自动将这条sql优化为:where A=x and B=x and C=X,这种优化会为了底层能够匹配到索引,同时在这个阶段是自动按照执行计划进行预处理,mysql会计算各个执行方法的最佳时间,最终确定一条执行的sql交给最后的执行器

执行器

执行器会调用对应的存储引擎执行 sql。主流的是 和 。

缓存

数据库在8.0以前是有缓存的,但是说实话这个用处不大,一般线上也不会开启数据库缓存,首先因为开启缓存也是占一定的开销的,另外实际应用中一模一样的sql语句重复多次查询的场景很少很少,所以在8.0以后直接把缓存给去掉了,所以缓存这里咱们就不讨论了。

总结

MySQL 层逻辑架构从上往下可以分为三层:

(1)第一层:处理客户端连接、授权认证等。

(2)第二层:服务器层,负责查询语句的解析、优化、缓存以及内置函数的实现、存储过程等。

(3)第三层:存储引擎,负责MySQL中数据的存储和提取。MySQL中服务器层不管理事务,事务是由存储引擎实现的。MySQL支持事务的存储引擎有、NDB 等,其中的使用最为广泛;其他存储引擎不支持事务,如、等。 具体过程都在图中有所标注,篇幅有限mysql调用存储过程不报错也不执行_一条sql语句究竟是如何执行的mysql调用存储过程不报错也不执行_一条sql语句究竟是如何执行的,大家可以先有个大概的认识,具体的步骤咱们后面继续更新。

公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299

资源库 - 资源分享下载网 » mysql调用存储过程不报错也不执行_一条sql语句究竟是如何执行的

常见问题FAQ

关于资源售价和售后服务的说明?
本站所有资源的标价均为本站收集资源的辛苦费,不代表资源本身的价值。软件是高智慧高价值的商品,不可能是白菜价。本站资源标价只是赞助费用,收取的赞助费仅用来维持本站的日常运营!毕竟收集整理资料需要投入云计算资源和站长大量的精力。
代码有没有售后服务和技术支持?
由于代码的运行具有不可预见性,本站不保证代码完整可运行,不提供技术支持和售后服务。 本站原创代码都是站长自己开发的,可以有偿提供技术支持服务。 网站里标明【亲测】的代码都是站长亲测过的,其他的代码由于精力有限,没有一一测试,不能保证代码就一定能够使用,更没有技术支持服务,下载前请自行斟酌。
有没有搭建服务?
由于搭建服务比较费时费力,所以本站除了原创代码外均不提供搭建服务。本站分享代码纯属兴趣爱好,不以盈利为目的,请勿咨询有没有搭建服务,谢谢理解。
链接地址失效了怎么办?
请带上资源链接地址联系客服,工作时间内我们看到后将第一时间回复。
关于解压密码
本站资源一般都没有加密,如果发现需要解压密码的,那么就输入 hao.35dc.com 试试。

发表评论

资源库,由老程序员细心甄别、精心筛选,只为提供优质的源码资源

关于我们 联系我们