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. Hystrix 超时配置重写
  2. python判断字符类型alpha_Python3.10第二个alpha版本来了!最新特性值得关注
  3. request 和response
  4. 基础篇-verilog-实现循环左移右移
  5. windows 64位 安装mvn提示 不是内部或外部命令
  6. 信息学奥赛C++语言: 求小数的某一位
  7. hbase倒序查询_hbase过滤器汇总【查询汇总】
  8. 空气螺旋桨,让水下动物不再受伤害
  9. 链家混三个月底薪_深圳链家正式入职,我想对应届毕业生说
  10. 太阳能最佳倾角c语言编程,用C语言编程计算太阳的高度角,用于控制太阳能电板最佳的倾角...
  11. 分享一个360加固脱壳模拟器
  12. 【考研数学】六. 三重积分
  13. Docker快速入门,看这个就够了
  14. 5G消息(RCS),到底是什么?
  15. 区块链100讲:如何使用开发环境命令行注册EOS靓号及变更EOS账号的active key和owner key?
  16. 仿豆瓣(静态web布局)(全)
  17. 对接广州施德朗电气有限公司
  18. JDBC访问数据库过程
  19. DBeaver Community
  20. 吉林大学计算机专业保研平均绩点,点赞!吉林大学2021届保研率20%,为985高校提供大量优质生源...

热门文章

  1. 飞刀:云原生内存数据库解锁存算一体
  2. jd-gui 安装包下载
  3. 写一篇5000字励志演讲稿
  4. python爬虫爬取使用Ajax请求的网站数据解析——以梅老板微博为例(m.weibo.cn)
  5. python中同时对多个字符进行替换_python同时替换多个字符串方法示例
  6. 一梦江湖获取服务器信息卡在100%,一梦江湖小技巧,不氪金,卡级玩家怎么获取资源提升修为...
  7. php 获取去年今日,描写去年今日句子 去年的今天怎么表达
  8. 点对点网络及其应用程序
  9. tar.gz压缩与解压命令
  10. 工具使用,PS万能对齐大法