[MySQL面试题]-内部技术架构 50-52 MySQL 内部核心模块与作用

44 阅读2分钟

image.png

50 MySQL 内部核心模块与作用

image.png

核心模块主要作用
1. 连接器(Connection Manager)管理客户端连接,权限认证,维持连接状态、线程管理等
2. 查询缓存 (Query Cache)已放弃(MySQL 8.0)
3.分析器(Parser)词法解析SQL,识别关键字、表名、字段名,生成语法树
4. 优化器(Optimizer)选择最优的执行计划(如索引选择,连接顺序等)
5.执行器(Executor)调用存储引擎,按执行计划真正执行SQL语句
6..存储引擎(Storage Engine)数据的实际存储与访问,如 InnoDB,MyISAM、Memory 等
7. 日志与事务管理(Log & TXN)管理 redo/undo日志、事务提交回滚、崩溃恢复
客户端
  ↓
连接器 → 分析器 → 优化器 → 执行器 → 存储引擎
                                    ↓
                           日志系统、事务系统

Parser:解析器:

image.png


51 MySQL 查询语句执行过程(执行流程)

SELECT name FROM users WHERE id = 1001;
客户端 SQL
   ↓
[连接器] ———→ 连接验证、线程管理
   ↓
[分析器] ———→ SQL语法/词法检查,生成语法树
   ↓
[优化器] ———→ 生成并选择最优执行计划(如:走哪个索引)
   ↓
[执行器] ———→ 解析执行计划,调用引擎接口
   ↓
[InnoDB 引擎] —→ 读取数据页/索引页(Buffer Pool)
   ↓
[结果缓存 & 返回]

image.png


52 MySQL 提示“不存在此列”是执行到哪个节点报出的?

分析器(Parser)阶段

当MySQL接收到SQL语句时,会经过词法分析和语法分析,在此过程中,分析器验证SQL中引用的字段名(列)、表名、函数名等是否存在。

客户端 → 连接器 → ✅ 分析器(出错) → 优化器 ❌(未执行) → 执行器 ❌

数据字典(**Data Dictionary,**基于InnoDB存储)

表的信息会存储在,数据字典。

通过 inforamation_schema.columns 查看

SELECT
    *
FROM
    information_schema.columns
WHERE
    table_schema = 'exp'       -- 数据库名
    AND table_name = 'users';  -- 表名

其他查看方式

use exp -- 切换数据库到 exp 库
SHOW CREATE TABLE table_name; -- 查看建表语句,包含字段定义和约束
/*
| users | CREATE TABLE `users` (
  `id` int NOT NULL,
  `name` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `email` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `age` int DEFAULT NULL,
  `city` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `created_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`),
  KEY `idx_age` (`age`),
  KEY `idx_city_age_email` (`city`,`age`,`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci |
*/
SHOW tables

+---------------+
| Tables_in_exp |
+---------------+
| customer      |
| employees     |
| products      |
| users         |
+---------------+
SHOW columns from users;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| id         | int          | NO   | PRI | NULL    |       |
| name       | varchar(100) | YES  | MUL | NULL    |       |
| email      | varchar(100) | YES  |     | NULL    |       |
| age        | int          | YES  | MUL | NULL    |       |
| city       | varchar(50)  | YES  | MUL | NULL    |       |
| created_at | datetime     | YES  |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+