MySQL 的体系结构、一条查询语句的执行过程

48 阅读2分钟

MySQL 的体系结构可以简单分为两层:服务器层和存储引擎层。

  1. 服务器层: 服务器层负责接收客户端的请求,解析 SQL 语句,查询优化,以及最后的结果返回给客户端。主要包括以下模块:

    • 连接器(Connection Manager): 负责建立和管理客户端的连接。当客户端请求连接时,连接器负责认证用户身份、获取或释放线程资源等。
    • 查询缓存(Query Cache): 用于缓存查询结果,提高相同查询的重复执行的性能。但在实际中,由于锁和内存管理等问题,查询缓存的使用并不总是建议的。
    • 分析器(Parser): 负责解析 SQL 语句,识别关键字和语法结构。
    • 优化器(Optimizer): 对查询进行优化,选择最优的执行计划。MySQL 使用基于成本的优化器,考虑不同执行计划的成本,并选择最低成本的执行方式。
    • 执行器(Executor): 执行由优化器生成的执行计划,获取存储引擎返回的数据。
    • 存储过程、触发器(Procedures, Triggers): 用于实现数据库中的存储过程和触发器。
  2. 存储引擎层: 存储引擎层负责存储数据,并提供对数据的增删改查操作。MySQL 支持多种存储引擎,例如 InnoDB、MyISAM、Memory 等。存储引擎层包括以下模块:

    • 查询接口(Query Interface): 存储引擎提供给服务器层的接口,负责执行 SQL 查询。
    • 锁(Locking): 处理并发访问,包括读写锁、表级锁、行级锁等。
    • 事务支持(Transaction Support): 负责处理事务,保证 ACID 特性。
    • 缓存(Caching): 存储引擎可以使用缓存来提高读取性能。
    • 索引(Indexing): 存储引擎负责实现索引结构,提高数据检索效率。
    • 日志(Logging): 记录数据的变更,用于崩溃恢复和数据恢复。

一条查询语句的执行过程主要经过连接器、查询缓存、分析器、优化器、执行器等模块,并涉及存储引擎的查询接口、锁、事务支持、缓存、索引、日志等模块。整个过程中,服务器层和存储引擎层相互协作,共同完成 SQL 查询的处理。