八股-Mysql 基础篇(1)
1. 执行一条SQL 查询语句,其中到底发生了什么?
1.1 Mysql的架构图

Mysql的架构主要分为两层,一层是Server层,另一层是存储引擎层
(1)Server层:主要负责建立连接、分析和执行sql语句。一般数据库的核心模块都在这里进行实现,包括连接器、查询缓存、解析器、预处理器、优化器和执行器。
(2)存储引擎层:主要负责数据的存储和提取。支持三种存储引擎,共用一个Server层,一般说的索引结构就是在存储引擎层实现的。
1.2 第一步 连接器
(1)与客户端通过TCP三次握手建立连接;
(2)校验用户名和密码,如果正确则赋予适当的权限;
Other:
Mysql的长连接和短连接:Mysql也有长连接和短连接的区别,长连接能够避免连接的频繁建立和断开,但是长连接建立会导致内存占用增多。因为Mysql使用内存管理连接对象,这些连接的对象只有在连接断开时才会进行释放。长连接如果累积过多的话,会导致资源受限无法及时释放。
1.3 第二步 查询缓存
建立连接之后,客户端向Mysql服务发送Sql语句,如果是查询语句,则其先会去查询缓存(Query Cache)中查找缓存数据,如果有的话直接返回,如果没有的话则继续下去执行。
在Mysql中将Server中的查询缓存进行移除,由于相对比较鸡肋
1.4 第三步 解析SQL
在正式执行语句的时候,Mysql中的解析器会对SQL语句进行解析。
(1)词法分析:根据输入的字符串识别出关键字和非关键字来
(2)语法分析:根据词法分析的结果,语法解析器根据语法规则判断是否合法并构建对应的SQL语法树
1.5 第四步 执行SQL
select 执行过程可以大致分为三个阶段,
(1)预处理阶段
1> 检查查询语句中的表或字段是否存在
2> 将 select中的 * 扩展为所有列
(2)优化阶段
1> 该阶段主要是确定好该查询语句的执行计划
(3)执行阶段
1> 根据查询计划进行执行,从存储引擎读取记录并返回给客户端

参考:
https://xiaolincoding.com/mysql/base/how_select.html#%E6%89%A7%E8%A1%8C%E5%99%A8
