MySQL 的架构大致可分为两层:Server 层 和 存储引擎层。
Server 层:
Server 层是MySQL的核心,负责处理大多数的核心服务功能,如连接器、查询缓存、预处理器、优化器、执行器以及所有的内置函数(如数学、日期和时间、加密函数)等。此外,还有跨存储引擎的功能(如存储过程、触发器、视图等)。
存储引擎层:
存储引擎层是 MySQL 数据存储和管理的核心部分。MySQL 支持多种存储引擎,每种存储引擎都有其特定的存储格式、索引方式和管理策略。最常见的存储引擎包括 InnoDB、MyISAM 和 Memory 等。
每种存储引擎都有其使用的场景。如,InnoDB 提供了事务支持、行级锁定和外键约束等特性,适用于需要高并发和复杂事务处理的场景;而 MyISAM 则提供了全文索引和压缩功能,适用于只读或大量读操作的场景。
那么,执行一条SQL查询语句,期间发生了什么?
连接器:
处理客户端的连接请求,验证用户身份,管理连接的生命周期。
查询缓存:
如果直接命中缓存,则直接返回结果,否则继续往下执行。在 MySQL 8.0 版本后移除。
解析器:
负责对SQL语句进行词法、语法分析,并将SQL语句解析成语法树,为后续的优化和执行做准备。
执行SQL:
1. 预处理阶段(Prepare): 验证表或字段是否存在;扩展通配符(如把 SELECT *
扩展为具体的列名)。
2. 优化阶段(Optimize):选择最佳的查询执行计划。这个过程会考虑多种因素,如索引的使用、连接顺序、聚合操作等。
3. 执行阶段(Execute):根据优化后的执行计划来执行 SQL 查询语句,将结果返回客户端(如果涉及多个表,还会进行整合处理)。
以上是结合学习小林coding
自己也概括的一些总结