前言
MySQL 作为目前最流行的开源关系型数据库管理系统之一,凭借其高性能、低成本和易用性,被广泛应用于各类互联网应用中。本文旨在系统性地梳理 MySQL 的核心知识点,涵盖架构原理、事务机制、存储引擎及性能优化等方面,帮助开发者深入理解其内部运作机制。
关系型数据库与非关系型数据库
关系型数据库
关系型数据库基于关系模型(二维表格模型)构建,数据以行和列的形式组织。SQL(Structured Query Language)是操作关系型数据库的标准语言,支持复杂的数据检索和操作。主流的关系型数据库包括 Oracle、MySQL、PostgreSQL、SQL Server 等。本文默认以 MySQL 的 InnoDB 引擎为主进行讲解。
非关系型数据库
非关系型数据库通常被称为 NoSQL,采用键值对、文档、列族或图结构等形式存储数据。相比关系型数据库,NoSQL 具有更高的读写性能和更好的水平扩展能力,适用于日志系统、海量数据存储、地理位置服务及高可用场景。主流的 NoSQL 数据库包括 Redis、MongoDB、HBase 等。
两者区别
- 关系型数据库:数据结构化强,易于理解;支持 ACID 事务,保证数据一致性;支持复杂查询(如 JOIN、子查询);适合金融、订单等对数据一致性要求高的场景。
- 非关系型数据库:无需 SQL 解析,读写效率高;基于键值对,扩展性强;支持多种数据类型(图片、文档等);适合社交、缓存、日志等对一致性要求较低但吞吐量要求高的场景。
MySQL 整体架构
SQL 执行流程
在 MySQL 中,一条 SQL 语句的执行大致遵循以下步骤:
- 客户端请求:应用程序通过连接发送 SQL 请求。
- 连接器:负责处理连接建立、身份验证、权限校验。
- 查询缓存:若开启且命中缓存,直接返回结果(MySQL 8.0 已移除)。
- 分析器:进行词法分析和语法分析,识别关键字和表结构。
- 优化器:决定使用哪个索引,生成最优执行计划。
- 执行器:调用存储引擎接口获取数据,并检查执行权限。
- 存储引擎层:负责数据的实际存储和提取。
架构图示说明
MySQL 架构主要分为三层:
- Server 层:包含连接器、查询缓存、分析器、优化器、执行器等组件,负责 SQL 解析、优化及跨引擎功能(如存储过程、触发器)。
- 存储引擎层:负责数据的存储和提取,采用插件式架构,支持 InnoDB、MyISAM、Memory 等多种引擎。InnoDB 自 5.5 版本起成为默认引擎。
- 底层文件系统:操作系统负责文件的物理存储。
连接器
连接器负责管理客户端连接。当应用连接 MySQL 时,服务器会验证用户名、密码、主机 IP 和端口号。连接成功后,服务器会验证该用户是否有权限访问特定数据库或表。每个客户端连接通常对应一个线程,查询在该线程中串行执行。
查询缓存与分析优化
查询缓存
在执行 SELECT 语句前,MySQL 会先检查查询缓存。如果缓存中存在完全相同的 SQL 语句及其结果,则直接返回。然而,只要表中发生任何更新操作,该表的缓存即失效。由于维护缓存的开销较大,从 MySQL 5.7.20 开始查询缓存被标记为废弃,MySQL 8.0 版本已彻底移除。
分析器
分析器分为两个阶段:
- 词法分析:识别 SQL 中的关键字(如 SELECT、FROM)、标识符(表名、字段名)等。
- 语法分析:根据语法规则判断 SQL 语句是否合法,构建语法树。
优化器与执行器
- 预处理:检查表和字段是否存在,将 SELECT * 展开为具体列名。


