一文读懂一条 SQL 查询语句是如何执行的

作者:系统运维 来源:系统运维 浏览: 【】 发布时间:2025-11-04 07:29:44 评论数:

[[404040]]

本文转载自微信公众号「飞天小牛肉」,文读作者飞天小牛肉。懂条转载本文请联系飞天小牛肉公众号。询语

2001 年 MySQL 发布 3.23 版本,句何自此便开始获得广泛应用,执行随着不断地升级迭代,文读至今 MySQL 已经走过了 20 个年头。懂条

为了充分发挥 MySQL 的询语性能并顺利地使用,就必须正确理解其设计思想,句何因此,执行了解 MySQL 的文读逻辑架构是必要的。本文将通过一条 SQL 查询语句的懂条具体执行过程来详细介绍 MySQL 架构中的各个组件。

MySQL 逻辑架构概览

MySQL 最重要、询语最与众不同的句何特性就是它的可插拔存储引擎架构(pluggable storage engine architecture),这种架构的执行设计将查询处理及其他系统任务和数据的存储/提取分离开来。来看官网的解释:

The MySQL pluggable storage engine architecture enables a database professional to select a specialized storage engine for a particular application need while being completely shielded from the need to manage any specific application coding requirements.

大致意思就是,MySQL 可插拔存储引擎架构使开发者能够为特定应用程序需求选择专门的存储引擎,同时完全无需管理任何特定应用程序编码要求。也就是说,服务器租用尽管不同存储引擎具有不同的功能,但应用程序不受这些差异的影响。

如果应用程序更改带来了需要更改底层存储引擎的需求,或者需要添加一个或多个存储引擎来支持新需求,则无需进行重大的编码或流程更改即可使工作正常进行。MySQL 服务器架构通过提供适用于跨存储引擎的一致且易于使用的 API,使应用程序免受存储引擎底层复杂性的影响。

MySQL 的逻辑架构图如下,参考《高性能 MySQL - 第 3 版》:

我们可以大致把 MySQL 的逻辑架构分成 Server 层和存储引擎层:

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

值得一提的云服务器是,Server 最上面的服务也就是连接器,拥有管理 MySQL 连接、权限验证的功能。显然这并非 MySQL 所独有,大多数基于网络的客户端/服务器的工具或者服务都有类似的架构。

2)第二层就是存储引擎(支持 InnoDB、MyISAM、Memory 等多个存储引擎)。存储引擎负责 MySQL 中数据的存储和提取,响应上层服务器的请求。每个存储引擎自然是有它的优势和劣势,不同的存储引擎之间无法相互通信,所以我们需要根据不同的场景来选择合适的存储引擎。

服务器通过 API 与存储引擎进行通信。这些接口屏蔽了不同存储引擎之间的差异,使得这些差异对上层的免费源码下载查询过程透明。存储引擎 API 包含几十个底层函数,用于执行诸如 “开始一个事务” 或者 “根据主键提取一行记录” 等操作。

需要注意的是,在 MySQL 5.1 及之前的版本,MyISAM 是默认的存储引擎,而在 MySQL 5.5.5 后,InnoDB 成为了默认的存储引擎。

连接器(Connector)

MySQL 5.7 的官方文档中,是这样描述连接器的:

MySQL Connectors provide connectivity to the MySQL server for client programs.

MySQL 连接器为客户端程序提供到 MySQL 服务器的连接。说得更细节一点的话,连接器其实会做两个事情,一个是管理 MySQL 连接,一个是权限验证。我们依次来解释下。

首先,要连接到 MySQL 服务器,我们通常需要提供 MySQL 用户名和密码,并且如果服务器运行在我们登录的机器以外的机器上,还需要指定一个主机名比如 host。所以连接命令一般是这样的:

复制shell> mysql -h host -u user -p  Enter password: 

最近更新