MySQL 逻辑架构图
- 第一层:客户端包含连接处理、授权认证、安全等
- 第二层:包括查询解析、分析、优化、缓存以及所有的内置函数(如:时间、日期、数学和加密函数);所有的跨存储引擎的功能也在此层实现:存储过程、触发器、视图等
- 第三层:存储引擎,负责 MySQL 的数据存储和提取。
- 存储引擎包含几十个底层函数,如:“开始一个事物”、“根据主键提取一行记录”
- 存储引擎不会去解析 SQL(注:InnoDB 是例外,会解析外键定义)
连接管理与安全性
- 每个客户端连接在服务进程中拥有一个线程
- 连接的查询只会在这个单独的线程中执行
- 该线程只能轮流在某个 CPU 核心或者 CPU 中运行
- 服务器会缓存线程,因此无需为每个新建的连接创建或销毁线程
- MySQL 5.5及更新版本支持线程池插件(
Thread-Pooling
),可以使用池中少量线程来服务大量连接
- MySQL 5.5及更新版本支持线程池插件(
优化与执行
- MySQL 解析查询,并创建内部数据结构(解析树),并对其进行优化,包括重写查询、决定表的读取顺序,以及合适的索引选择等
- 用户可通过特殊关键字提示(
hint
)优化器,影响它的决策过程; - 可请求优化器解释(
explain
)优化过程的各个因素,便于知道如何优化决策 - 优化器不关心使用什么存储引擎,但存储引擎对于优化查询有影响。
- 对于
SELECT
语句,在解析查询前,服务器会先检查查询缓存(Query Cache
);如能查询到,则不必执行查询解析、优化和执行,而直接返回查询缓存中的结果集