mysql总体上分为server层和存储引擎层

server层负包括连接器、缓存、解析器、优化器、执行器

存储引擎层则负责存储数据

连接器

连接器负责跟客户端建立连接、获取权限、维持和管理连接。

它首先会判断请求的账号和密码是否正确,如果不正确则返回 ”Access denied for user”的错误,当账户验证成功后,连接器会去权限表中查询该用户的权限,该连接随后所有操作的权限都与此次查询的权限有关(即使修改了用户的权限,这条连接的权限还是获取时的权限,只有下次建立新的连接才会修改)

通过 show processlist 可以查看当前的连接以及其状态,当连接超过 8 小时没有进行任何的操作就会断开连接,时长可以通过 wait_timeout 控制

一个连接的连接时间过长可能会导致 mysql 发生 OOM,因为一个连接所占用的内存只有在断开时被清理,所以我们可以通过以下方法解决

  • 定期断开连接,直到下次需要进行操作时再重新创建连接
  • mysql5.7 之后的版本可以运行 mysql_reset_connection 来将所有连接恢复到初始的状态

缓存

当一条查询请求到达后,会先到查询缓存中查找是否存在缓存,缓存以 key-value 的形式存储,key 为 sql 语句,value 为查询结果

通常不建议使用查询缓存,因为其弊大于利:

查询缓存的失效非常的频繁,一张表的缓存会在这张表更新时全部删除,这就可能导致了一个缓存还没有被使用就被删除了,这样频繁更新的表的缓存命中率就会很低

在 mysql8.0 后查询缓存的模块就被删除了

​ 解析器

如果缓存没有命中就会进入解析器,解析器会对 sql 语句进行 “词法分析” 和 “语法分析”

词法分析会将 sql 语句中每个单词的含义分析出来,如:select 代表查询关键字、T 对应数据库中一张表

语法分析则会判断这条 sql 语句是否满足语法要求

优化器

如果解析器判断 sql 语句没有问题就会进入优化器,优化器顾名思义就是对 sql 语句进行优化

mysql> select * from t1 join t2 using(ID)  where t1.c=10 and t2.d=20;

上述语句有两种方案:

  • 先找到 t1 中 c=10 的数据,之后根据 id 进行联合,再找到 t2 中 d=20 的数据

  • 先找到 t2 中 d=20 的数据,之后根据 id 进行联合,再找到 t1 中 c=10 的数据

这两种方案的执行效果相同,但是最终的执行时间不一定相同,优化器的作用就是找到执行的方案和选择索引

经过优化器后 sql 的执行方案就被确定下来了

执行器

执行器会根据前面的结果执行语句

执行前会进行权限的判断是否有对该表的权限,如果没有就会报错

如果有权限就会根据执行方案和选择的索引执行相应的语句,不同的表有不同的引擎,这里会调用相应引擎的接口去执行

mysql 中 sql 查询语句的执行过程 (mysql基本架构)相关推荐

  1. 一条SQL查询语句的执行过程,一张图说清SQL查询语句执行过程

    一张图说明 一条SQL查询语句的执行过程 一条sql语句从发送到数据库到它执行完成并返回结果,主要经历以下几个过程: 连接器->查询缓存(如果开启了查询缓存,则会经过这一步,但是大多数情况下都是 ...

  2. 讲mysql执行流程书籍_MySQL 基础架构 1. 一条SQL查询语句的执行过程(个人学习笔记)...

    MySQL的逻辑架构图: MySQL 大体分为 "server 层" 和 "存储引擎层" 两部分: Server 层 包括 连接器.查询缓存.分析器.优化器.执 ...

  3. for语句的执行过程_深入学习MySQL 01 一条查询语句的执行过程

    在学习SpringCloud的同时,也在深入学习MySq中,听着,,看着<高性能MySQL>,本系列文章是本人学习过程的总结,水平有限,仅供参考,若有不对之处或有啥建议都可与我联系,感谢! ...

  4. 一条mysql查询语句的执行过程

    当我们执行一条MySQL查询语句时,对于客户端而言是一个很简单的过程,但对于服务端来说其内部却会涉及到一些复杂的组件和处理逻辑.了解MySQL语句的内部执行原理,有助于我们更好地去处理一些复杂的SQL ...

  5. mysql 在sql查询语句结果中,数字加千分逗号

    mysql 在sql查询语句结果中,数字加千分逗号 FORMAT(X,D) 将number X设置为格式 '#,###,###.##', 以四舍五入的方式保留到小数点后D位, 而返回结果为一个字符串. ...

  6. SQL优化之SQL查询语句的执行顺序解析

    SQL语句执行顺序 SQL语句执行顺序 结合上图,整理出如下伪SQL查询语句. SQL语句执行顺序 从这个顺序中我们可以发现,所有的查询语句都是从 FROM 开始执行的.在实际执行过程中,每个步骤都会 ...

  7. 一文读懂MySQL查询语句的执行过程

    需要从数据库检索某些符合要求的数据,我们很容易写出 Select A B C FROM T WHERE ID = XX  这样的SQL,那么当我们向数据库发送这样一个请求时,数据库到底做了什么? 我们 ...

  8. MySQL - MySQL查询语句的执行过程

    需要从数据库检索某些符合要求的数据,我们很容易写出 Select A B C FROM T WHERE ID = XX 这样的SQL,那么当我们向数据库发送这样一个请求时,数据库到底做了什么? 我们今 ...

  9. Mysql中慢查询语句分析

    序言 学习方法这是大部分人都可以掌握的,但是学习的驱动力可能每个人都不太相同.有的人是真正的热爱,有的人是为生活所迫,而有的人是为了证明自己. 我不算是一个热爱编程的人,至少之前一直不算是,对于自己的 ...

最新文章

  1. php连接mysql数据库测试_php连接mysql数据库连接测试文件
  2. 100+人的企业IP怎么进行安全配置 ?
  3. Scrapy 扩展中间件: 同步/异步提交批量 item 到 MySQL
  4. javascript中的事件处理
  5. 最全的jquery datatables api 使用详解
  6. 基于fpga的dds函数信号发生器的设计_超声信号功率放大器驱动压电陶瓷测试
  7. Mybatis学习随笔
  8. 计算机专业的描述,计算机专业描述怎么写
  9. lisp 读取样条曲线座标点_autolisp绘制样条曲线
  10. NOIP2016普及组T2(回文日期)题解
  11. 万能密码 php,分析PHP网站下的万能密码
  12. Discuz模板制作教程
  13. vivoy85a参数配置_vivo Y85手机详细配置参数和图鉴
  14. AIBU-在建工程转固定资产(预转固)报错:消息号AW002 资产无单项需结算
  15. mysql添加字段及备注_MySQL字段的说明和备注信息
  16. Python编写的客户端给服务器发送指令执行相应的命令并返回结果
  17. 考研高数之无穷级数题型一:判断收敛性、求收敛半径以及收敛域和收敛区间(题目讲解)
  18. 台湾地震受损电缆预计三周左右可修复
  19. Swing版《房屋租赁合同》
  20. NVIDIA官方中文版GPU编程指南v2.20(转载自GZeasy)

热门文章

  1. 【李开复】给中国学生的第六封信——选择的智慧(六)
  2. 远程控制华为服务器,远程虚拟控制台 - 华为服务器 iMana 200 用户指南 25 - 华为...
  3. mysql 全屏显示_popupwindow全屏显示-备忘(示例代码)
  4. android button 中文字位置设置,iOS开发-- 设置UIButton的文字显示位置、字体的大小、字体的颜色...
  5. python爬取b站弹幕并进行数据可视化
  6. Vivado18.3-Vivado Simulator仿真 学习笔记
  7. 红米2A移动增强版_标注:2014512_官方线刷包_救砖包_解账户锁
  8. python357左轮-【斯蒂芬尼娅·桑德雷莉】意大利著名女影星_人物百科→MAIGOO百科...
  9. 如何使用MATLAB绘制绕线画?附带颜色渲染
  10. 服务器企业版(1020)发行注记