一、 MySQL结构图
如图可见MySQL服务器主要是由 Connection Pool(连接池)、Management Services & Utilities(服务管理和工具)、SQL Interface(SQL接口)、Parser(解析器)、Optimizer(优化器)、Caches & Buffers(查询缓存)、Pluggable Storage Engines(存储引擎)、File systems(文件系统)组成。
二、MySQL各组件的作用
1. Connection Pool(连接池) 用于管理用户连接和线程处理,由于MySQL建立链接需要消耗很多时间,连接池会将这些链接进行缓存,更好的提升服务器性能。
2. Management Services & Utilities(服务管理和工具) 服务管理和控制工具。
3. SQL Interface(SQL接口) 接收来自客户端的SQL命令,并且返回执行结果给客户端。
4. Parser(解析器) 解析SQL语句,解析器是由Lex和YACC实现的。解析器会将SQL语句分解成数据结构,后续的执行步骤都是基于这个结构来解析和处理的。如果SQL语句不合理,在解析器分解时就会出现错误,那么SQL语句将不会继续执行下去。
5. Optimizer(优化器) SQL语句在执行之前会进行语句优化,优化器使用的策略是 "选取 - 投影 - 联接"。
6. Caches & Buffers(查询缓存) 在执行我们的查询语句时会先从缓存中去查询,如果命中了缓存则会直接去查询缓存中取数据,这样也大大提高了查询的性能。
7. Pluggable Storage Engines(存储引擎) 包含各种存储引擎 InnoDB、MyISAM、Memory ...等,存储引擎才是真正和存储数据打交道的组件。
8. File systems(文件系统) MySQL存储的数据文件、索引文件以及日志文件等。
三、查询语句的执行过程
上图可以很清楚的看出,当客户端请求一条查询SQL时,首先会先从查询缓存里去查询看是否由命中查询结果如果有则直接返回结果给客户端,如果没有那么就会把SQL语句传递给解析器进行解析,解析器会将SQL进行数据结构化并进行预处理判断SQL语句是否正确,解析器解析完后将最新的解析树传递给查询优化器进行优化,优化完后生成执行计划给到存储引擎中,存储引擎从文件系统中取出数据并将数据返回给客户端同时进行缓存。