当前位置: 首页 > java >正文

mysql整体架构

MySQL 整体结构

一、整体架构概览

命中
未命中
客户端
连接器
查询缓存
返回结果
分析器
优化器
执行器
存储引擎

核心分层架构

层级组件核心功能
Server层连接器/查询缓存连接管理、权限验证、SQL解析、优化、执行
分析器/优化器/执行器内置函数、跨存储引擎功能(视图/存储过程/触发器)
存储引擎层InnoDB/MyISAM等数据存储与检索,支持插件式架构(默认InnoDB)

二、核心组件执行流程

1. 连接器

连接器(Connection)模块负责管理客户端与服务端之间的 TCP 连接

客户端 连接器 权限表 mysql -h$ip -P$port -u$user -p 验证身份(用户名+密码) 返回用户权限 建立连接会话 连接成功 Access denied alt [认证成功] [认证失败] 保持请求 返回结果 loop [连接保持] wait_timeout=28800秒(8小时) 长时间无请求 断开连接 连接已关闭 客户端 连接器 权限表

核心功能:

  1. 身份认证:验证用户名/密码
    • 错误返回:Access denied for user
  2. 权限管理:读取权限表,确定操作权限
  3. 连接管理
    • 空闲超时断开(wait_timeout控制,默认8小时)
    • 返回错误:Lost connection to MySQL server during query
-- 查看连接状态
SHOW PROCESSLIST;-- 查看超时设置
SHOW VARIABLES LIKE 'wait_timeout';
-- 详细一些的
SELECT * FROM information_schema.processlist;

2. 查询缓存(MySQL 5.7存在,8.0移除)

MySQL 在早期版本中提供了一个查询缓存机制,用于缓存查询结果,以提高重复查询的性能。

运作机制:

  • Key-Value结构:Key=SQL语句,Value=查询结果

  • 参数控制:

    SHOW VARIABLES LIKE 'query_cache%';  -- 查看缓存配置
    SET GLOBAL query_cache_type = DEMAND; -- 按需使用模式
    

手动指定缓存:

SELECT SQL_CACHE * FROM user WHERE id=1;

移除原因:

  • 缓存失效频繁:任何表更新都会使相关缓存失效
  • 命中率低下:OLTP系统更新频繁
  • 维护开销大:缓存管理消耗CPU资源

替代方案:应用层缓存(Redis/Memcached)或专用缓存数据库


3. 分析器

负责对 SQL 语句进行词法分析和语法分析,生成抽象语法树(AST)。

处理阶段:

  1. 词法分析
    • 识别关键词:SELECTFROMWHERE
    • 提取对象:表名user、列名id
    • information_schema获取元数据
  2. 语法分析
    • 验证SQL是否符合MySQL语法规则
    • 错误示例:ERROR 1064 (42000): You have an error...

4. 优化器

决定如何高效地执行查询,选择最优的执行计划。

原始SQL
优化器
可选方案
方案1:全表扫描
方案2:索引A
方案3:索引B
成本估算
选择最低成本方案

核心决策:

  • 索引选择策略(单表多索引场景)

  • 多表关联顺序(JOIN重排优化)

  • 示例优化场景:

    SELECT * FROM t1 JOIN t2 USING(ID) 
    WHERE t1.c=10 AND t2.d=20;
    
    • 方案1:t1(c=10) → t2(d=20)
    • 方案2:t2(d=20) → t1(c=10)

5. 执行器

按照优化器生成的执行计划,实际执行查询操作并返回结果。

执行流程:

优化器 执行器 存储引擎 Client 执行计划 权限验证 打开表 获取下一行 返回行数据 应用WHERE条件 保留匹配行 loop [行处理] 返回结果集 优化器 执行器 存储引擎 Client

权限验证时机:

  • 查询缓存命中:返回结果前验证
  • 未命中:执行器阶段验证
  • 触发器操作:运行时动态验证

三、存储引擎层

存储清清负责数据的实际存储和检索,定义了数据在磁盘上的组织形式及访问方式。

引擎适用场景特性限制
InnoDB事务处理 高并发写入ACID兼容 行级锁 外键支持相对较高内存占用
MyISAM读密集型应用 数据仓库高读取速度 全文索引无事务支持 表级锁
Memory临时数据 高速缓存内存存储 极快访问数据易丢失 表大小受限

生产建议:除非特殊需求,优先使用InnoDB

http://www.xdnf.cn/news/12687.html

相关文章:

  • 在 Windows 11 或 10 上将 Visual Studio Code 添加到系统路径
  • C++学习-入门到精通【15】异常处理深入剖析
  • (附实例代码及图示)混合策略实现 doc-doc 对称检索
  • FreeRTOS任务调度过程vTaskStartScheduler()任务设计和划分
  • redis分布式锁
  • Python训练营打卡DAY47
  • 4G物联网模块提升智慧农业的自动化生产效率
  • 【CSS-5】深入理解CSS复合选择器:提升样式表的精确性与效率
  • 第三章支线二 ·函数幻阶:语法召唤与逻辑封印
  • A Execllent Software Project Review and Solutions
  • 函数式接口实现分页查询
  • AI开发 | 生成式AI在企业软件中的演进形态:从嵌入式到智能体
  • nodejs:用 nodemailer 发送一封带有附件的邮件
  • 【JavaSE】集合学习笔记
  • C++ 对 C 的兼容性
  • 基于Scala实现Flink的三种基本时间窗口操作
  • 跨平台资源下载工具:res-downloader 的使用体验
  • Vue3中computed和watch的区别
  • OpenLayers 导航之运动轨迹
  • 深入剖析 RocketMQ 中的 DefaultMQPushConsumerImpl:消息推送消费的核心实现
  • Docker基础(二)
  • TTL简述
  • Unity基础-欧拉角和四元数
  • 【Elasticsearch】映射:Join 类型、Flattened 类型、多表关联设计
  • 基于springboot的藏文古籍系统
  • Nature子刊:16S宏基因组+代谢组学联动,借助MicrobiomeGS2建模揭示IBD代谢治疗新靶点
  • Java高级 | 【实验六】Springboot文件上传和下载
  • Python 中的MVC与MVP 框架与示例
  • LVGL对显示接口的要求
  • 闲庭信步使用SV搭建图像测试平台:第一课——图片的读写