MySQL 逻辑架构图

image.png

  • 第一层:客户端包含连接处理、授权认证、安全等
  • 第二层:包括查询解析、分析、优化、缓存以及所有的内置函数(如:时间、日期、数学和加密函数);所有的跨存储引擎的功能也在此层实现:存储过程、触发器、视图等
  • 第三层:存储引擎,负责 MySQL 的数据存储和提取。
    • 存储引擎包含几十个底层函数,如:“开始一个事物”、“根据主键提取一行记录”
    • 存储引擎不会去解析 SQL(注:InnoDB 是例外,会解析外键定义)

连接管理与安全性

  • 每个客户端连接在服务进程中拥有一个线程
  • 连接的查询只会在这个单独的线程中执行
  • 该线程只能轮流在某个 CPU 核心或者 CPU 中运行
  • 服务器会缓存线程,因此无需为每个新建的连接创建或销毁线程
    • MySQL 5.5及更新版本支持线程池插件(Thread-Pooling),可以使用池中少量线程来服务大量连接


优化与执行

  • MySQL 解析查询,并创建内部数据结构(解析树),并对其进行优化,包括重写查询、决定表的读取顺序,以及合适的索引选择等
  • 用户可通过特殊关键字提示(hint)优化器,影响它的决策过程;
  • 可请求优化器解释(explain)优化过程的各个因素,便于知道如何优化决策
  • 优化器不关心使用什么存储引擎,但存储引擎对于优化查询有影响。
  • 对于 SELECT 语句,在解析查询前,服务器会先检查查询缓存(Query Cache);如能查询到,则不必执行查询解析、优化和执行,而直接返回查询缓存中的结果集