0. MySQL的基础架构图:

(图片来自极客时间:https://time.geekbang.org/column/article/68319)

大体来说,MySQL可以分为Server层(服务器层) 和 存储引擎层 两部分。

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

而 存储引擎层 负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多种存储引擎。现在最常用的存储引擎是 InnoDB,它从MySQL 5.5.5 版本开始成为了默认存储引擎。

从图中不难看出,不同的存储引擎共用一个Server层,也就是从连接器到执行器的部分。
下面依次看下每个组件的作用。

1. 连接器:

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

mysql> show global variables like "%timeout";
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| interactive_timeout | 28800 |
| wait_timeout        | 28800 |
+---------------------+-------+

如果在连接被断开之后,客户端再次发起请求的话,就会收到一个错误提醒:
Lost connection to MySQL server during query.
这时候如果你要继续,就需要重连,然后再执行请求。(mysql_ping + reconnect_opt)

由于连接建立的过程复杂且开销大,一般建议使用长连接。而长连接有一个问题就是MySQL在执行过程中临时使用的内存都会存放到连接对象中,长时间不释放持续累积会导致内存占用过大。

解决方式是:
客户端主动定期断开长连接,或者执行一个占用内存的大查询后断开连接再重连:
调用执行 ‘mysql_reset_reconnection’ 来重新初始化连接资源,无需重连、无需权限验证,会使连接恢复到新建完成时的状态。

int mysql_reset_connection(MYSQL *mysql);

2.查询缓存:

查询缓存弊大于利,查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。除非你的业务就是一张静态表,很长时间才会更新一次。

可以将参数 ‘query_cache_type’ 设置成 DEMAND,这样对于默认的SQL语句都不使用查询缓存,而对于你确定要使用查询缓存的语句可以使用 ‘SQL_CACHE’ 显式指定:

mysql> select SQL_CACHE * from T where ID = 10;

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

3.分析器:

分析器:通过分析器 知道要做什么。

分析器 先做 “词法分析”,再做“语法分析”,“词法分析”将select等关键字从你输入的字符串中识别出来,再识别出表名、列名 等;“语法分析”检查输入的语法是否有错误,例如“select”输入成了“elect”。

4.优化器:

优化器:通过优化器知道 该怎么做。

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

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

5.执行器:

开始执行的时候,要先判断一下你对这个表是否有执行查询的权限。

select * from T where ID = 10;

执行过程是这样的:

如果这个表没有索引,则执行器调用 存储引擎的 ‘取下一行’ 接口,取出数据后判断ID的值是否等于10,如果不是则跳过,如果是则将这行存入到结果集中,重复调用存储引擎的接口取下一行,直到取到这个表的最后一行。

如果这个表有索引,则执行器调用存储引擎的 ‘取满足条件的第一行’ 接口,之后循环调用 ‘取满足条件的第一行’ 接口,这些都是存储引擎中已经定义好的。

MySQL基础架构:一条SQL“查询语句”是如何执行的相关推荐

  1. 【mysql技术内幕1】mysql基础架构-一条SQL查询语句是如何执行的

    文章目录 1 一条SQL查询语句是如何执行的 2 mysql体系结构 3 InnoDB存储引擎 4 总结 1 一条SQL查询语句是如何执行的 ​ 通常我们使用数据库,都是将数据库看成一个整体,我们的应 ...

  2. 怎么做mysql查询系统_mysql数据库系统学习(一)---一条SQL查询语句是如何执行的?...

    一.第一节:一条sql查询语句是怎样执行的 5.5.5版本以后,默认使用存储引擎为InnoDB 不使用查询缓存,MySQL8.0没有查询缓存这个功能 总体来说:MySQL分为service层和存储引擎 ...

  3. 听说你写sql很溜,一条sql查询语句是如何执行的?

    我们项目中必不可少要与数据库接触,那么一条sql查询语句是如何执行的呢? 本文以MySQL数据库为例.MySQL是典型的C/S架构(client客户端/server服务端),客户端进程向服务端进程发送 ...

  4. MySQL番外篇:一条SQL查询语句是如何执行的?

    在面试的过程中,有的面试官会给出一条简单的SQL查询语句,让简单说一下执行的过程. SELECT * FROM emp where age=30; 以下问MySQL的基本架构图,从中可以看出SQL语句 ...

  5. 一条SQL查询语句是如何执行的? MySql杂谈

    在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天.每周,都会留下一些脚印,就是这些创作的内容,有一种执着,就是不知为什么,如果你迷茫,不 ...

  6. 01 | 基础架构:一条 SQL 查询语句是如何执行的

    1. MySQL整体架构预览   MySQL 的基本架构示意图,从中你可以清楚地看到 SQL 语句在 MySQL的各个功能模块中的执行过程.   大体来说,MySQL 可以分为 Server 层和存储 ...

  7. 01 | 基础架构:一条SQL查询语句是如何执行的?笔记(转)

    连接器 第一步,你会先连接到这个数据库上,这时候接待你的就是连接器.连接器负责跟客户端建立连接.获取权限.维持和管理连接.连接命令一般是这么写的: mysql -h$ip -P$port -u$use ...

  8. 【MySQL原理解析】01. 一条SQL查询语句是如何执行的

    这是[MySQL原理解析]的第一篇文章,MySQL我看了很多的书与教程,对其原理有一定的理解,一直想写一系列的文章来把MySQL的原理给讲清楚,一直没有时间写,今天算是个开头吧.万事开头难,咱们先破了 ...

  9. 执行sql语句_一条SQL查询语句是如何执行的?

    本篇文章将通过一条 SQL 的执行过程来介绍 MySQL 的基础架构. 首先有一个 user_info 表,表里有一个 id 字段,执行下面这条查询语句: select * from user_inf ...

最新文章

  1. 提高mysql性能的开源软件
  2. java整数类型int字面值_JavaKotlinAndroidGuide
  3. c语言倒计时不影响进程_2017级C语言大作业 - 见缝插针
  4. 使用对象操作流程,读写文件
  5. 【itext学习之路】--6.将html转成pdf(解决中文不显示)
  6. 从数学到计算机 从莱布尼兹到冯诺依曼 从数理逻辑到算法分析
  7. Java 基础整理(一)
  8. C#接口的使用场合,接口应用
  9. Linux下创建与解压zip, tar, tar.gz和tar.bz2文件
  10. NFC Enable 过程分析(三)
  11. 一题多解 —— python ndarray 的 value_counts
  12. 取得人生成功的40条定律
  13. spss数据预处理步骤_关于SPSS数据预处理心得
  14. R语言基于mgcv包进行广义可加模型及交互作用演示(2)
  15. T410与T410i有什么区别?
  16. verilog源码积累:ram和axi slaver
  17. 哪种投影仪好用?家用电视投影仪哪种好
  18. 在轮询系统如何将A站订单在B站自动建立,并调用B站产品
  19. 2023 IAPP影视解析源码
  20. cordova多语言(国际化,本地化,全球化)

热门文章

  1. GNU Radio: 射频子板
  2. 支付宝推“移动花卡”:花呗账单延后还
  3. Java 绘制带圆角头像的二维码
  4. 项目管理5阶段|一位高级项目经理的4年项目经验分享
  5. 软件工程 in MSRA 第一周博客作业
  6. xshell6使用技巧_Xshell6的正确打开方式
  7. 基于swoole的网页一对一实时聊天
  8. STM32MP157开发板调试笔记
  9. Kotlin: Java 6 废土中的一线希望
  10. 科技创业企业密集关注网络电话等通信产业