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查询语句执行过程的更多相关文章

  1. MySQL查询语句执行过程及性能优化(JOIN/ORDER BY)-图

    http://blog.csdn.net/iefreer/article/details/12622097 MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY) 标签 ...

  2. MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY)

    在上一篇文章MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介中介绍了EXPLAIN语句,并举了一个慢查询例子:

  3. [转]MySQL查询语句执行过程详解

    Mysql查询语句执行原理 数据库查询语句如何执行?语法分析:首先进行语法分析,对使用sql表示的查询进行语法分析,生成查询语法分析树.语义检查:检查sql中所涉及的对象以及是否在数据库中存在,用户是 ...

  4. MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介

    网站或服务的性能关键点很大程度在于数据库的设计(假设你选择了合适的语言开发框架)以及如何查询数据上. 我们知道MySQL的性能优化方法,一般有建立索引.规避复杂联合查询.设置冗余字段.建立中间表.查询 ...

  5. 小觑数据库(SqlServer)查询语句执行过程

    近年来,越来越多的NoSql产品不断的以技术革命的者的身份跳出来:“你看哥是多么的快,你们关型型数据库真是战五渣阿”.是的,高性能的场景下NoSql真的很出彩.而我们关系型数据库只能在墙角哭泣&quo ...

  6. mysql中SQL执行过程详解与用于预处理语句的SQL语法

    mysql中SQL执行过程详解 客户端发送一条查询给服务器: 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果.否则进入下一阶段. 服务器段进行SQL解析.预处理,在优化器生成对应的 ...

  7. python 3 mysql sql逻辑查询语句执行顺序

    python 3 mysql sql逻辑查询语句执行顺序 一 .SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_t ...

  8. MySQL 语句执行过程详解

    MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 My ...

  9. mysql第四篇--SQL逻辑查询语句执行顺序

    mysql第四篇--SQL逻辑查询语句执行顺序 一.SQL语句定义顺序 SELECT DISTINCT <select_list> FROM <left_table> < ...

随机推荐

  1. java实现第四届蓝桥杯危险系数

    危险系数 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系. 我们来定义一个危险系数DF( ...

  2. REDIS主从频繁切换事件排查

    目录 前言 现象 排查 结论 redis主从配置注意点 前言 目前生产配置了2台redis一主一从1.193和12.6,和3个哨兵.1.193,3.10,12.6,搭建的redis高可用环境.突然发生 ...

  3. 美女面试官问我Python如何优雅的创建临时文件,我的回答....

    [摘要] 本故事纯属虚构,如有巧合,他们故事里的美女面试官也肯定没有我的美,请自行脑补... 小P像多数Python自学者一样,苦心钻研小半年,一朝出师投简历. 这不,一家招聘初级Python开发工程 ...

  4. How to delete a directory recursively in Java

    在java8或更高版本中,使用NIO API递归删除一个非空目录: try { // 创建stream流 Stream<Path> file = Files.walk(Paths.get( ...

  5. idea 启动命令行的时候提示不能创建PTY

    问题描述: 昨天上午,凯哥还在好好的使用idea,中午的时候,360扫描,好像要升级还是要干嘛的,没细看,然后凯哥就点击确定.结果到下午使用idea的Terminal 命令行的时候提示,如下图错误: ...

  6. 深度学习在高德ETA应用的探索与实践

    1.导读 驾车导航是数字地图的核心用户场景,用户在进行导航规划时,高德地图会提供给用户3条路线选择,由用户根据自身情况来决定按照哪条路线行驶. 同时各路线的ETA(estimated time of ...

  7. 面试了 6 轮 Google 中国 之后,还是挂了

    去年换工作的时候, 面试了一下 Google (这里说的是 Google 中国哈), 来了个 Google 面试六轮游, 结果是没通过.

  8. Mybatis详解(二) sqlsession的创建过程

    我们处于的位置 我们要清楚现在的情况. 现在我们已经调用了SqlSessionFactoryBuilder的build方法生成了SqlSessionFactory 对象. 但是如标题所说,要想生成sq ...

  9. DedeCms 标签中channelartlist设置属性标签样式的方法

    实现的效果如下: {dede:channelartlist typeid='6' row='3' currentstyle='current'} <li class='{dede:field.c ...

  10. Lavarel 执行:php artisan migrate时报错

    错误如下: 执行:php artisan migrate时报错: [PDOException]SQLSTATE[HY000] [2002] Connection refused 解决办法: 第一步:. ...