1. 连接池(接待部门)

作用:管理客户端连接(线程复用避免频繁创建销毁)。 

关键机制: 

   采用线程池处理并发请求(比如100个用户同时查询)。 

   认证你的用户名密码(`mysql.user`表权限校验)。 

吐槽点:连接数过多会爆(`max_connections`参数控制)。

 

2. SQL接口(前台客服)

干了啥:接收你的SQL语句(`SELECT/INSERT`等),分类转发给后续部门。 

有趣细节: 

   解析SQL语法(比如验证`WHERE`写法对不对)。 

   区分简单命令(如`SHOW DATABASES`直接处理)和复杂查询(需优化器介入)。

 

3. 查询缓存(临时备忘录)(MySQL 8.0已移除!)

历史作用:缓存`SELECT`结果(若表数据未变更,直接返回缓存)。 

淘汰原因: 

   缓存命中率低(表一更新就失效)。 

   维护缓存反而增加开销。

 

4. 解析器(语法检查员)

核心任务:将SQL语句转为解析树(类似编译器的AST)。 

典型错误:`You have an error in your SQL syntax...`就是它抛出的。

 

5. 优化器(智能调度官)

关键决策:生成执行计划(决定怎么查最快)。 

   例子:`SELECT * FROM user WHERE id=1 AND name='Alice'` 

    → 优先用`id`索引(假设它区分度更高)。 

黑科技: 

   成本估算(基于统计信息,如索引基数)。 

   可能选错计划(需`EXPLAIN`诊断)。

 

6. 执行引擎(工人团队)

协作模式: 

   调用存储引擎接口(如InnoDB)读写数据。 

   处理临时表、排序等操作(如`ORDER BY`用到`sort_buffer`)。

 

7. 存储引擎(仓库管理员)(插件式架构,可替换!)

InnoDB(默认)核心设计: 

  缓冲池(Buffer Pool):高频数据的内存缓存(减少磁盘IO)。 

  事务支持:通过undo log(回滚)、redo log(崩溃恢复)实现ACID。 

  锁机制:行锁、间隙锁(解决并发冲突)。 

对比MyISAM:不支持事务,但全文索引快(适合读多写少场景)。

 

8. 日志系统(审计追踪员)

 关键日志: 

  Binlog(归档日志):主从复制的核心(逻辑日志,记录SQL语句)。 

  Redo Log(重做日志):确保事务持久性(物理日志,循环写入)。 

  Undo Log(回滚日志):实现事务原子性(记录数据修改前的值)。

 

数据流动示例(一条UPDATE语句)

1. 客户端发送`UPDATE products SET price=99 WHERE id=10`。 

2. 解析器检查语法,优化器决定走`id`主键索引。 

3. InnoDB先查Buffer Pool: 

    命中则直接修改内存数据页。 

    未命中则从磁盘加载到Buffer Pool。 

4. 记录undo log(为回滚做准备),修改内存数据。 

5. 生成redo log(`prepare`状态)。 

6. 写binlog(用于复制/时间点恢复)。 

7. redo log标记`commit`,事务完成。 

点赞(1)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)