Mysql查询语句执行过程
Mysql查询语句执行过程
Mysql分为server层和存储引擎两部分,或许可以再加一层连接层
连接层(器)
Mysql使用的是典型的C/S架构。连接器通过典型的TCP握手完成连接。
需要注的是,
如果用户名和密码都正确,那么该连接所拥有的权限仅仅是连接成功建立时的所读取到的权限
这就意味着:当连接已经建立后,我们在对该用户的权限进行修改,这些修改要直到该用户再次建立连接时才会生效。
这听起来是个不好的设计,因为一旦建立连接,管理员是无法临时收回权限的。
索性,MySQL也想到了这一点,因此对于已经连接的空闲连接,在一定时间后会自动断开 --- 由参数wait_timeout控制,默认值是8小时。
我们可以使用
show processlist
查看已有连接是否处于空闲(Sleep)状态

想要使用示例数据库详见此处
我想,应该是为了用户权限的“稳定”才有了上面所谓的“不安全”的设计,因此使用DCL语句的时候要更加谨慎才行。
另外需要注意的是,
MySQL在执行过程中临时使用的内存是管理在连接对象中的
这就意味着,当我们连接一次然后不断通过该连接进行操作时(即使用长连接时),临时内存会不断积累,直到连接断开的时候才释放。但当内存占用过大,被系统杀掉(OOM --- Out of memory ),就会表现为MySQL异常关闭/重启。
为了避免这种状况我们可以使用两种规避方式:
- 避免长连接,尽量使用短连接 --- 但建立连接其实是很耗时的
- 使用MySQL5.7或者更高版本,可以通过
mysql_reset_connection来初始化连接 --- 即在不重建连接的情况下释放临时内存(它是一个API方法,而不是直接在mysql shell中使用的命令,详见)
server层
就根据各个层次的名字一样,顾名思义,我们主要在在server层处理一条SQL语句,而这个过程在MySQL8.0版本后如下所示:
(连接器)>> 分析器 >> 优化器 >> 执行器
分析器就是对SQL字符串的拆分与辨析
优化器就是“择优”,即
在表里有多个索引的时候选择使用哪个索引、在多表关联(join)的时候选择速度最快的join方式,如在进行如下查询时
select * from t1 join t2 using(Id) where t1.a=10 and t2.b=20;
优化器就会帮助我们选择是 “先选出t1.a=10的部分再关联t2” 还是 “先选出t2.b=20的部分再关联t1”
执行器,
开始执行 》 判断有没有相关权限 》使用表定义中的引擎 》 进行扫描执行语句
在8.0之前的版本还有“查询缓存”的机制,就是将查询过的结果放在缓存中以期望下次再次执行相同查询时能快速返回结果。但...哪里有那么多相同的查询呢,更过分的是这里的相同还要求表要没有发生改变,且语句的大小写都要相同。Are you serious ?于是弃之。
存储引擎
MySQL存储引擎负责存储和提取,其架构是插件式,支持(默认)InnoDB等多个存储引擎。
搜索引擎是针对表的,在create table 时可以使用engine = xxx来使用指定内存引擎。
让MySQL为我们记录执行流程
Mysql查询语句执行过程的更多相关文章
- MySQL查询语句执行过程及性能优化(JOIN/ORDER BY)-图
http://blog.csdn.net/iefreer/article/details/12622097 MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY) 标签 ...
- MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY)
在上一篇文章MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介中介绍了EXPLAIN语句,并举了一个慢查询例子:
- [转]MySQL查询语句执行过程详解
Mysql查询语句执行原理 数据库查询语句如何执行?语法分析:首先进行语法分析,对使用sql表示的查询进行语法分析,生成查询语法分析树.语义检查:检查sql中所涉及的对象以及是否在数据库中存在,用户是 ...
- MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介
网站或服务的性能关键点很大程度在于数据库的设计(假设你选择了合适的语言开发框架)以及如何查询数据上. 我们知道MySQL的性能优化方法,一般有建立索引.规避复杂联合查询.设置冗余字段.建立中间表.查询 ...
- 小觑数据库(SqlServer)查询语句执行过程
近年来,越来越多的NoSql产品不断的以技术革命的者的身份跳出来:“你看哥是多么的快,你们关型型数据库真是战五渣阿”.是的,高性能的场景下NoSql真的很出彩.而我们关系型数据库只能在墙角哭泣&quo ...
- mysql中SQL执行过程详解与用于预处理语句的SQL语法
mysql中SQL执行过程详解 客户端发送一条查询给服务器: 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果.否则进入下一阶段. 服务器段进行SQL解析.预处理,在优化器生成对应的 ...
- python 3 mysql sql逻辑查询语句执行顺序
python 3 mysql sql逻辑查询语句执行顺序 一 .SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_t ...
- MySQL 语句执行过程详解
MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 My ...
- mysql第四篇--SQL逻辑查询语句执行顺序
mysql第四篇--SQL逻辑查询语句执行顺序 一.SQL语句定义顺序 SELECT DISTINCT <select_list> FROM <left_table> < ...
随机推荐
- Linux文件搜索命令locate、which、grep详解
命令locate详解 命令locate,其基本功能是在文件资料库中可以快速的搜索系统文件,占用系统资源很少,例如:locate my.cnf 还可以使用locate -i [文件名],不区分大小写进行 ...
- java正则匹配 指定内容以外的 内容
今天,遇到一个需要 匹配出 指定内容以外的 内容的需求. 乍一看,需求貌视很简单啊,直接上 非贪婪模式的 双向零宽断言(有的资料上也叫 预搜索.预查.环视lookaround): 比如,我要匹配 串内 ...
- Okapi BM25算法
引言 Okapi BM25,一般简称 BM25 算法,在 20 世纪 70 年代到 80 年代,由英国一批信息检索领域的计算机科学家发明.这里的 BM 是"最佳匹配"(Best M ...
- CMAKE工具学习
最近在学习各大物联网平台的SDK包,发现其工程都使用了一种叫cmake的工具在管理代码.于是花了一天时间简单学习了解了cmake工具,其目的是让自己能读懂使用该工具管理的代码,并能简单使用该工具管理我 ...
- Hbase的基本架构以及对应的读写流程
一.HBase简介 1,定义: HBase 是一种分布式.可扩展.支持海量数据存储的 NoSQL 数据库. 2,HBase的架构图: 架构角色: 1)Master Master是所有Region Se ...
- 十几万条数据的表中,基于帝国cms 。自己亲身体验三种批量更新数据的方法,每一种的速度是什么样的
需求是 上传Excel 读取里面的数据.根据Excel中某一个字段,与数据表中的一个字段的唯一性.然后把 Excel表中数据和数据库表中数据一次更改.本次测试一次更新31条数据. 本次测试基于帝国cm ...
- C#数据结构与算法系列(二):稀疏数组(SparseArray)
1.介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组. 稀疏数组的处理方法是: 1.记录数组一共有几行几列,有多少个不同的值 2.把具有不同值的元素的 ...
- matlab之指派问题(整数规划)
1 c=[ ; ; ; ]; c=c(:);%将矩阵C按列拉直,然后赋给C,例如矩阵C=[,,;,,],操作完后就是列向量1,,,,, a=zeros(,); for i=: a(i,(i-)*+:* ...
- spring Cloud网关之Spring Cloud Gateway
Spring Cloud Gateway是什么?(官网地址:https://cloud.spring.io/spring-cloud-gateway/reference/html/) Spring C ...
- animation 动画 与 transition
animation: name duration timing-function delay iteration-count direction; 值 描述 animation-name 规定需要绑定 ...