mysql的sql执行原理图_性能测试MySQL之SQL运行原理

一,MySQL运行原理

1de3de566f9e84bf54e601069d5e2083.png

66387f37eb865c341b38c9c9f5149488.png

两个一样的图

1,SQL语句执行的过程详细说明

如上图所示,当向MySQL发送一个请求的时候,MySQL到底做了什么:

a, 客户端发送一条查询给服务器。

b, 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段。

c, 服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划。

d, MySQL根据优化器生成的执行计划,再调用存储引擎的API来执行查询。

e, 将结果返回给客户端。

查询缓存说明;

MySQL查询缓存保存查询返回的完整结构。当查询命中该缓存时,MySQL会立刻返回结果,跳过了解析、优化和执行阶段。

查询缓存系统会跟踪查询中涉及的每个表,如果这些表发生了变化,那么和这个表相关的所有缓存数据都将失效。

MySQL将缓存存放在一个引用表中,通过一个哈希值引用,这个哈希值包括了以下因素,即查询本身、当前要查询的数据库、客户端协议的版本等一些其他可能影响返回结果的信息。

当判断缓存是否命中时,MySQL不会进行解析查询语句,而是直接使用SQL语句和客户端发送过来的其他原始信息。所以,任何字符上的不同,例如空格、注解等都会导致缓存的不命中。

当查询语句中有一些不确定的数据时,则不会被缓存。例如包含函数NOW()或者CURRENT_DATE()的查询不会缓存。包含任何用户自定义函数,存储函数,用户变量,临时表,mysql数据库中的系统表或者包含任何列级别权限的表,都不会被缓存。

有一点需要注意,MySQL并不是会因为查询中包含一个不确定的函数而不检查查询缓存,因为检查查询缓存之前,MySQL不会解析查询语句,所以也无法知道语句中是否有不确定的函数。

事实则是,如果查询语句中包含任何的不确定的函数,那么其查询结果不会被缓存,因为查询缓存中也无法找到对应的缓存结果。

解析和预处理说明:

解析器通过关键字将SQL语句进行解析,并生成对应的解析树。MySQL解析器将使用MySQL语法规则验证和解析查询。

预处理器则根据一些MySQL规则进行进一步检查解析书是否合法,例如检查数据表和数据列是否存在,还会解析名字和别名,看看它们是否有歧义

查询优化器说明:

查询优化器会将解析树转化成执行计划。一条查询可以有多种执行方法,最后都是返回相同结果。优化器的作用就是找到这其中最好的执行计划。

生成执行计划的过程会消耗较多的时间,特别是存在许多可选的执行计划时。如果在一条SQL语句执行的过程中将该语句对应的最终执行计划进行缓存,当相似的语句再次被输入服务器时,就可以直接使用已缓存的执行计划,从而跳过SQL语句生成执行计划的整个过程,进而可以提高语句的执行速度。

d2b64e3fadeb8500baf56ee3445b55d8.png

MySQL使用基于成本的查询优化器(Cost-Based Optimizer,CBO)。它会尝试预测一个查询使用某种执行计划时的成本,并选择其中成本最少的一个。

优化器会根据优化规则对关系表达式进行转换,这里的转换是说一个关系表达式经过优化规则后会生成另外一个关系表达式,同时原有表达式也会保留,经过一系列转换后会生成多个执行计划,然后CBO会根据统计信息和代价模型(Cost Model)计算每个执行计划的Cost,从中挑选Cost最小的执行计划。由上可知,CBO中有两个依赖:统计信息和代价模型。统计信息的准确与否、代价模型的合理与否都会影响CBO选择最优计划

查询执行引擎说明:

在解析和优化阶段,MySQL将生成查询对应的执行计划,MySQL的查询执行引擎根据这个执行计划来完成整个查询。这里执行计划是一个数据结构,而不是和其他的关系型数据库那样生成对应的字节码

返回结果给客户端说明:

如果查询可以被缓存,那么MySQL在这个阶段页会将结果存放到查询缓存中。

MySQL将结果集返回给客户端是一个增量、逐步返回的过程。在查询生成第一条结果时,MySQL就可以开始向客户端逐步返回结果集了

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

穹顶灯打不出阴暗面_Java 8星期五:Java 8的阴暗面

穹顶灯打不出阴暗面在Data Geekery ,我们喜欢Java。 而且,由于我们真的很喜欢jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 Java 8星期五 每个星期五,我们都会向您展示一些不错的教程风格的…

【渝粤教育】广东开放大学 物业服务营销管理 形成性考核 (59)

选择题 题目: 单选 ( )是物业服务产品的期望产品。 答案:看左侧 题目: 单选 ( )是指模仿市场上旺销的其他物业服务企业的产品而开发的某种新产品。 答案:看左侧 题目&#xff1a…

【渝粤教育】广东开放大学 系统工程 形成性考核 (25)

选择题 题目:系统工程与系统科学的区别是,前者是工程技术,后者是基础理论。 答案:看左侧 题目:"有机论”生物学认为,有机体可分解为各个部分,各个部分的功能完全决定了系统的功能和特性。 …

Java 11:JOIN表,获取Java流

是否曾经想过如何将联接的数据库表转换为Java Stream? 阅读这篇简短的文章,并了解如何使用Speedment Stream ORM完成它。 我们将从Java 8示例开始,然后研究Java 11的改进。 Java 8和JOIN 速度允许将动态JOIN:ed数据库表作为标准J…

mysql宽字节注入_转宽字节注入详解

在mysql中,用于转义的函数有addslashes,mysql_real_escape_string,mysql_escape_string等,还有一种情况是magic_quote_gpc,不过高版本的PHP将去除这个特性。首先,宽字节注入与HTML页面编码是无关的&#xf…

【渝粤教育】电大中专中药制剂学 (2)作业 题库

1.根据药典、药品标准等将药物加工制成具有一定规格,可直接用于临床的药物制品,称为()。 A.制剂 B.剂型 C.单味中药 D.中成药 E.炮制 错误 正确答案:左边查询 学生答案:D 2.药材经过炮制后可直接用于中医临…

mysql集群软件有哪些_浅谈数据库集群软件优缺点有哪些

满心狼藉回答时间:2019-12-05向TA提问集群(Cluster)是由两台或多台节点机(服务器)构成的一种松散耦合的计算节点集合,为用户提供网络服务或应用程序(包括数据库、Web服务和文件服务等)的单一客户视图,同时提供接近容错机的故障恢复能力。集群…

【渝粤教育】电大中专办公设备使用与维护 (2)作业 题库

1以下哪个不是现代办公硬件需求的主要依赖()。 A扫描仪 B计算机 C办公桌 D打印机 错误 正确答案:左边查询 学生答案:B 2现代办公设备可分为计算机、通信()三大类。 A电子工具 B办公机械 C路由器 D碎纸机 错…

input发送a.jax_JAX-RS 2.0中的透明PATCH支持

input发送a.jaxPATCH方法是最不受欢迎的HTTP方法之一,因为直到最近才真正没有一种标准的PATCH格式。 一段时间以来,它已经针对JSON进行了标准化,因此有很多库可以为您完成繁重的工作。 出于本博客的目的,我将使用json-patch&#…

python 日志函数参数_将日志信息作为参数传递给函数

我使用的Python库使用logging模块。但是,我创建了自己的log函数,脚本在内部使用。在下面是我要使用的日志记录功能:def log(name, content, swtch : bool None, time None):time time or datetime.now(pytz.timezone(US/Pacific))if swtch…

【渝粤教育】电大中专就业指导作业 题库

1.( )给中职生就业带来的机遇和挑战 A.一带一路 B.发展标准化服务业 C.“十三五”规划 正确 正确答案:左边查询 学生答案:C 2.最受企业欢迎的人才应具备( )素质 A.道德品质、文化认同、敬业精神、团队意识、…

python回车和换行的区别_回车与换行的解释~!

Unix/Linux和Windows回车换行Linux/Unix下的回车符与windows下的不同,Linux/unix下的回车符是0d,而在windows下则是0d0a,据说这和电脑刚开始发展时的电传打印机的速度有关。在计算机还没有出现之前,有一种叫电传打字机(teletype model 33)的玩…

【渝粤教育】电大中专常见病药物治疗作业 题库

1.作为退热药,阿司匹林的劣势是( )。 A.口服吸收迅速而完全 B.婴幼儿发热用阿苯片 C.儿童用药可引起Reye综合征,尤其是病毒性感染引起的发热 D.作用于下丘脑体温调节中枢 E.解热镇痛作用较强 错误 正确答案:左边查询 学…

在Spring Boot启动时运行代码

Spring Boot会自动为我们执行很多配置,但是迟早您将不得不做一些自定义工作。 在本文中,您将学习如何进入应用程序引导生命周期并在Spring Boot启动时执行代码 。 因此,让我们看看该框架提供了什么。 1. Bean初始化时执行方法 Spring启动您…

错误:在keystone中无法找到默认角色user_第四章 keystone认证组件安装1

1、在控制节点安装rabbitmq、memcached组件apt-get -y install rabbitmq-server memcached python-pymysql # 设置openstack用户 rabbitmqctl add_user openstack password #后一个password是密码,需要特别注意,要与后面组件访问时的密码一致 #设置ope…

【渝粤教育】电大中专建设工程法规1作业 题库

1.注册建造师应当在相应的岗位上执业。但同时,国家鼓励和提倡注册建造师( )。 A.一师多岗 B.一师全岗 C.一师专岗 D.专岗专职 正确 正确答案:左边查询 学生答案:A 2.下列规范性文件中,效力最高的是( )。 A.地方性法规 B.行政法规 C.行政规章…

【渝粤教育】电大中专新媒体营销实务 (13)作业 题库

1.新媒体在进行内容传播时,可以做到将文字、图片、视频等同时传播,呈现出( )的特点。 A.移动化 B.多元化 C.便捷性 错误 正确答案:左边查询 学生答案:A 2.第四媒体发展到宽带互联网阶段成为( &a…

ubuntu加了张固态_将ubuntu系统迁移到ssd固态

朋友送了一个固态硬盘给我,因此将原机械硬盘上的系统迁移到固态硬盘上。原机械硬盘(dev/sdb)装有win10和ubuntu双系统。分区情况如下:sda1:ESP分区sda2:资料sda3:资料sda4:swap分区,被我干掉了&…

【渝粤教育】电大中专测量学 (3)作业 题库

试卷答案 1水准面是水体受地球重力的作用而形成的,其物理特点是在同一水准面上的任意一点具有相等的重力势位,上面任意一点的铅垂线都垂直于该点所在曲面的切平面。 A正确 B错误 正确 正确答案:左边查询 学生答案:A 2在地球表面&a…

php cdi_教程:编写自己的CDI扩展

php cdi今天,我将向您展示如何编写CDI扩展。 CDI提供了一种扩展功能的简便方法,例如 添加自己的范围, 启用Java核心类进行扩展, 使用注释元数据进行扩充或修改, 以及更多。 在本教程中,我们将实现一个…