MySQL执行流程 Execution Flow
一个查询是怎么执行的?
下面的select语句在MySQL中是如何执行的?
select * from tab_1 where id = 1;
一个查询的执行过程大致如下图所示。
可以把MySQL分为两大部分:Server层和存储引擎层。
Server层
大多数核心功能模块都在这里实现,主要包括连接器、查询缓存、解析器、预处理器、优化器和执行器等。所有内置函数,如时间函数和跨引擎的功能(存储过程)都在这一层实现。
- 连接器:负责建立连接(长连接,短连接,重置连接等)
- 查询缓存:查询的可选项。然而,缓存并不总是有用的,因为数据可能被频繁更新。在MySQL 8.0不支持了。
- 解析器:词法分析(lexical analysis),语法分析(syntax analysis)。包括检查一个查询列是否存在。
- 优化器:决定了使用哪个索引。当执行
join
读表时开始执行。 - 执行器:验证;管理binlog;与存储引擎交互。
1)连接器
客户端可以输入下面的命令连接数据库,那么连接的过程是怎么样的呢?
mysql -h -u -p
- 首先,客户端会和MySQL服务端经过TCP三次握手建立TCP连接。
- 建立TCP连接后,连接器会开始验证客户端输入的用户名和密码。
- 如果用户名和密码正确,连接器就会获取该用户的权限,以明确接下来用户可操作的范围。
如果用户已经建立连接,即使管理员修改用户的权限,那么已经建立的连接的权限不会受影响。