当前位置:首页 > MySQL教程 > 正文内容

关于 mysql 执行流程的解析_MySQL教程,mysql

搜教程4年前 (2020-02-02)MySQL教程153

mysql索引详解(总结)_MySQL教程

上文《关于 mysql 执行流程的解析》中我们主要介绍了sql语句在server层的执行过程;我们再来分析一下具体的语句在引擎层的执行步骤,CRUD的操作都跟索引相关,我们先了解一下索引.....

MySQL 可以分为 Server 层和存储引擎层两部分

Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核 心服务功能,以及所有的内置函数,所有跨存储引 擎的功能都在这一层实现,比如存储过程、触发器、视图等

而存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、 MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB

(免费学习视频教程推荐:mysql视频教程)

我们来看一下sql的执行流程

连接器

第一步,你会先连接到这个数据库上,这时候接待你的就是连接器。连接器负责跟客户端 建立连接、获取权限、维持和管理连接

连接完成后,如果你没有后续的动作,这个连接就处于空闲状态,你可以在 show processlist 命令中看到它

客户端如果太长时间没动静,连接器就会自动将它断开。这个时间是由参数 wait_timeout 控制的,默认值是 8 小时

建立连接的过程通常是比较复杂的,所以在使用中要尽量减少建立连接的动作,也就是尽量使用长连接

但是全部使用长连接后,你可能会发现,有些时候 MySQL 占用内存涨得特别快,这是因 为 MySQL 在执行过程中临时使用的内存是管理在连接对象里面的。这些资源会在连接断 开的时候才释放

怎么解决这个问题呢?你可以考虑以下两种方案。

1.定期断开长连接。使用一段时间,或者程序里面判断执行过一个占用内存的大查询后, 断开连接,之后要查询再重连。

2.如果你用的是 MySQL 5.7 或更新版本,可以在每次执行一个比较大的操作后,通过执 行 mysql_reset_connection 来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态

查询缓存

连接建立完成后,你就可以执行 select 语句了。执行逻辑就会来到第二步:查询缓存。 MySQL 拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。之前 执行过的语句及其结果可能会以 key-value 对的形式,被直接缓存在内存中。key 是查询 的语句,value 是查询的结果。如果你的查询能够直接在这个缓存中找到 key,那么这个 value 就会被直接返回给客户端

mysql索引介绍_MySQL教程

索引是一种高效获取数据的数据结构,索引类型分为FULLTEXT、RTREE、HASH、BTREE,其中mysql主要使用HASH与BTREE两种。

如果语句不在查询缓存中,就会继续后面的执行阶段。执行完成后,执行结果会被存入查 询缓存中。你可以看到,如果查询命中缓存,MySQL 不需要执行后面的复杂操作,就可 以直接返回结果,这个效率会很高

但是大多数情况下不要使用查询缓存,为什么呢?因为查询缓存往往弊大于利。

查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清 空。因此很可能你费劲地把结果存起来,还没使用呢,就被一个更新全清空了。对于更新 压力大的数据库来说,查询缓存的命中率会非常低。除非你的业务就是有一张静态表,很长时间才会更新一次

你可以将参数 query_cache_type 设置 成 DEMAND,这样对于默认的 SQL 语句都不使用查询缓存

MySQL 8.0 版本直接将查询缓存的整块功能删掉了,也就是说 8.0 开始彻 底没有这个功能了

分析器

如果没有命中查询缓存,就要开始真正执行语句了。首先,MySQL 需要知道你要做什 么,因此需要对 SQL 语句做解析

分析器先会做“词法分析”。你输入的是由多个字符串和空格组成的一条 SQL 语句, MySQL 需要识别出里面的字符串分别是什么,代表什么

做完了这些识别以后,就要做“语法分析”。根据词法分析的结果,语法分析器会根据语法规则,判断你输入的这个 SQL 语句是否满足 MySQL 语法

优化器

经过了分析器,MySQL 就知道你要做什么了。在开始执行之前,还要先经过优化器的处 理。

优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联 (join)的时候,决定各个表的连接顺序

优化器阶段完成后,这个语句的执行方案就确定下来了,然后进入执行器阶段

执行器

开始执行的时候,要先判断一下你对这个表 T 有没有执行查询的权限,如果没有,就会返 回没有权限的错误

如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口去执行

到这里server层就执行完毕 具体的引擎层逻辑我们下一篇文章进行分析

以上就是关于 mysql 执行流程的解析的详细内容,更多请关注ki4网其它相关文章!

分析SQL查询语句是如何执行的_MySQL教程

MySQL分为Server层和存储引擎层两部分,Server层包括连接器、查询缓存、分析器、执行器等,以及所有的内置函数和跨存储引擎的功能,存储引擎层负责数据的存储和提取,支持多个存储引擎。

扫描二维码推送至手机访问。

版权声明:本文由搜教程网发布,如需转载请注明出处。

本文链接:https://www.sojiaocheng.cn/17096.html

标签: mysql
分享给朋友:

“关于 mysql 执行流程的解析_MySQL教程,mysql” 的相关文章

cookie属性和要领剖析【MySQL教程】,cookie,ie,解析

cookie属性和要领剖析【MySQL教程】,cookie,ie,解析

cookie属性详解 在chrome掌握台中的resources选项卡中能够看到cookie的信息。 一个域名下面能够存在着很多个cookie对象。 name字段为一个cookie的称号。 value字段为一个cookie的值。 domain字段为能够接见此cookie的域名。...

MySQL存储历程 游标 错误处理的示例代码【MySQL教程】,MySQL,错误,游标

MySQL存储历程 游标 错误处理的示例代码 --set_account_data 从新生成用户编号 BEGIN DECLARE temp_id INT(8); /*用户id*/ DECLARE t...

mysql索引index相干敕令的细致引见【MySQL教程】,mysql,index,命令

mysql索引index相干敕令的细致引见【MySQL教程】,mysql,index,命令

本文主要内容: 显现表中多有的索引show all index 增加索引ADD INDEX, 增加唯一索引add unique index 多列团结增加索引,primary key 关键词index vs key show all index show index fr...

mysql5.1 command line client 登录时涌现闪退怎样处理【MySQL教程】,mysql5.1,command,client

由于长时间没有运用mysql command line client。今天在运用时,翻开界面,输入暗码后就涌现了闪退,同时workbench平台也显现不能衔接数据库。起首我照着百度试了一下,觉察在“计算机“-->"治理"(右键)-->“效劳”下,没有找到mysql有关的效劳。 处理办法以...

怎样竖立可打印中文的数据库【MySQL教程】,数据库,中文,打印

平常的数据库的字符型数据的编码都是 latinl,这是不支撑中文的 而支撑中文的字符编码是utf-8和gbk 要想让数据库里的表能够显现中文就必须在竖立数据库的时刻指定字符编码 1 create database bb charset=utf8; 或许 1 1 create d...

mysql中DAO形式【MySQL教程】,mysql,模式

JDBC封装 长处: 断绝细节 下降代码间耦合性 进步代码可扩展性和保护性 附注: DAO形式供应了接见关联型数据体系所需操纵的接口,将数据接见和营业逻辑离开,对 上层供应面向对象的数据接见接口. DAO形式完成两层星散: 代码间分工明白,数据接见层代...