MySQL 面试系列:一条select语句在MySQL是这样执行的?

其它MySQL 面试系列:

MySQL 面试系列:MySQL查询如何进行优化?

MySQL 面试系列:一条select语句在MySQL是这样执行的?
MySQL 面试系列:MySQL 常见的开放性问题
MySQL 面试系列:MySQL 性能优化 & 分布式

MySQL 面试系列:MySQL 命令和内置函数
MySQL 面试系列:MySQL 中日志的面试题总结
MySQL 面试系列:MySQL 中锁的面试题总结

MySQL 面试系列:MySQL 事务的面试题总结
MySQL 面试系列:MySQL 索引的面试题总结
MySQL 面试系列:MySQL 基础模块的面试题总结


一、从宏观的角度分析MySQL

首先看一张经典图片

image

这幅图估计很多人都看到过,也是经典之作高性能 MySQL 里边的。

闲话少说,进入正题。

上图的客户端可以直接理解为 PHP、Java 等。接下来,你会看到连接、线程处理。这一部分并不是 MySQL 所特有的,而且大多数客户端、服务器都具有类似的结构。

因此,一般而言,MySQL可以分为两层:Server层存储引擎层

Server层 主要包括连接层、查询缓存、分析器、优化器、执行器等重要模块组成,这一层还包含了 MySQL 核心 Api 部分,比如常用的格式化时间、加密等。

存储引擎 大家都很熟悉,因为在面试中经常被问到的的问题: InnodbMyisam 存储引擎的不同。

所以想过没有,MySQL 为什么会有这么多的存储引擎呢?

一切技术起源于当下问题,同样在 MySQL 中也不例外。

MySQL 在存储引擎这一方面的架构是插件式的,即可以随意切换不固定,而且 MySQL5.5 版本存储引擎已经默认为 Innodb

二、一条SQL执行要经过多少困难?

下图是一条 SQL 执行的主要流程

image.png

图中还有一个熟悉的陌生人查询缓存模块,该模块在MySQL8.0中已不存在。

关于该模块为何要被删除,后续的文章也将于大家交流。

首先,我们将大致了解当我们执行一条SQL语句时,如何在这个架构图中运行。

2-1 连接器

mysql -u root -p连接数据库命令,在执行之后,你将需要输入密码。当完成经典的TCP握手之后,连接器就开始发挥作用了。

如果码错误时,则返回Access denied for user ‘root‘@‘localhost‘ (using password: YES,错误编码1045。

如果连接信息均正确,则此时将根据你输入的用户访问权限表来获取该用户的权限,此处必须清楚,当你登录成功后,即使其他人修改了你的权限,在这个连接未断开之前你的权限是不会发生改变的。

当你连接完成之后,如果你一直不做任何事情,执行show processlist将会看到一个sleep,表示空连接。

那么你知道在MySQL中,如果连接成功后没有进行任何操作,多久会被自动中断?

可以执行show variables like 'wait_timeout';用于查看时间。

你可能感兴趣的:(MySQL 面试系列:一条select语句在MySQL是这样执行的?)