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

【MySQL 基础篇】深入解析MySQL逻辑架构与查询执行流程

在这里插入图片描述

1 MySQL逻辑架构概述

MySQL 的逻辑架构主要分为 Server 层和存储引擎层两部分。

  1. Server 层:包含连接器、查询缓存、分析器、优化器、执行器等组件。同时,所有的内置函数(如日期、时间、数学和加密函数等)也在这一层实现。此外,存储过程、触发器、视图等功能也由 Server 层来完成。
  2. 存储引擎层:负责数据的存储和提取,其架构模式是插件式的。常见的存储引擎有 InnoDB、MyISAM、Memory 等,从 MySQL 5.5.5 版本开始,InnoDB 成为了默认的存储引擎。

MySQL基本架构示意图

2 SQL查询语句执行流程

2.1 连接器

  • 功能:负责跟客户端建立连接、获取权限、维持和管理连接。

  • 连接命令mysql -h$ip -P$port -u$user -p,密码若直接跟在 -p 后面存在密码泄露风险。

  • 权限相关:用户名和密码认证通过后,连接器会从权限表中查出用户拥有的权限。连接中的权限判断依赖于此时读取的权限,修改用户权限不会影响已存在连接的权限。

  • 查看连接状态命令:show processlist,若结果中的 Command 列显示为“Sleep”的这一行,就表示现在系统里面有一个空闲连接。
    在这里插入图片描述

  • 连接空闲:连接空闲时间由参数 wait_timeout 控制,默认值为 8 小时。连接断开后,客户端再次发送请求会收到错误提醒。可通过show variables like "wait_timeout"查看连接超时时间。
    在这里插入图片描述

  • 长连接:为减少建立连接的开销,建议使用长连接,但长连接可能导致内存占用过大。解决方法有定期断开长连接,或者在 MySQL 5.7 及更新版本中执行 mysql_reset_connection 来重新初始化连接资源。

2.2 查询缓存

  • 执行流程:MySQL 拿到查询请求后,会先到查询缓存中查找,若能找到对应的语句,则直接返回结果;若没有命中缓存,则进入后续执行阶段,执行完成后,结果会被存入查询缓存。
  • 使用建议:由于查询缓存失效频繁(只要对表进行更新,该表上所有的查询缓存都会被清空),所以大多数情况下不建议使用。可以将参数 query_cache_type 设置成 DEMAND,实现按需使用。也可以在语句中用 SQL_CACHE 显式指定使用查询缓存。需要注意的是,MySQL 8.0 版本直接删除了查询缓存功能。
mysql> select SQL_CACHE * from T where ID=10

在这里插入图片描述

2.3 分析器

  • 词法分析:对输入的 SQL 语句进行分析,识别其中的字符串分别代表什么。
  • 语法分析:根据词法分析的结果,判断 SQL 语句是否满足 MySQL 语法。如果语句存在语法错误,会收到 “You have an error in your SQL syntax” 的错误提醒,并提示错误位置。

2.4 优化器

在表里面有多个索引的时候,决定使用哪个索引;在一个语句有多表关联(join)时,决定各个表的连接顺序,从而确定语句的执行方案。

2.5 执行器

  • 权限判断:先判断对表是否有执行查询的权限,如果没有权限,会返回没有权限的错误。
  • 执行过程:有权限则打开表,根据表的引擎定义,调用引擎提供的接口。对于没有索引的表,执行器会按行遍历表中的数据,判断条件是否满足;对于有索引的表,会调用相应的接口获取数据。
  • 扫描行数:执行器执行过程中会记录扫描的行数(rows_examined),需要注意的是,由执行器调用引擎获取数据行时累加,部分场景下引擎扫描行数跟 rows_examined 并不是完全相同的。

3 课后问题解答

当表 T 中没有字段 k,执行 select * from T where k=1 语句时,会报 “Unknown column ‘k’ in ‘where clause’” 的错误。

Answer:这个错误是在分析器阶段报出的,因为分析器的词法分析和语法分析会检查表名和字段名称是否存在等情况,当发现字段不存在时就会报错。

4 实际应用中的思考

在实际应用中,深入理解 MySQL 的架构和 SQL 查询语句的执行流程,对于优化查询性能、解决权限和语法相关问题具有重要意义。比如:

  • 根据业务场景选择合适的存储引擎,判断是否使用查询缓存;
  • 在开发过程中,重视分析器阶段的语法检查,减少因语法错误导致的问题;
  • 合理设计索引和表结构,利用优化器提高查询效率等。

5 参考链接

  1. MySQL 实战 45 讲
http://www.xdnf.cn/news/439201.html

相关文章:

  • 【Ansys 2023 R2 Icepak】热管模型
  • 武汉科技大学人工智能与演化计算实验室许志伟课题组参加2025中国膜计算论坛
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】附录-B. 错误代码与解决方案
  • 论文阅读笔记——双流网络
  • 从阿里SDK学习请求-响应模式
  • 【Python】抽象基类ABC
  • [论文阅读]Formalizing and Benchmarking Prompt Injection Attacks and Defenses
  • 构建现代化WPF应用:数据驱动开发与高级特性解析
  • LeetCode 热题 100 230. 二叉搜索树中第 K 小的元素
  • 多模态论文笔记——NaViT
  • 2005-2022年各省绿色信贷水平测算数据(含原始数据+计算过程+计算结果)
  • 《AI大模型应知应会100篇》第61篇:FastAPI搭建大模型API服务
  • Vue3 区分开发环境与生产环境
  • PostgreSQL常用DML操作的锁类型归纳
  • 搜索二维矩阵 II
  • 【达梦数据库】超出全局hash join空间问题处理
  • 生活实用小工具-手机号归属地查询
  • PaddleNLP框架训练模型:使用SwanLab教程
  • 养生:拥抱健康生活的实用之道
  • URP相机如何将场景渲染定帧模糊绘制
  • PyTorch中mean(dim=1)的深度解析
  • P2168 NOI2015 荷马史诗
  • Kubernetes排错(十七) :kubelet日志报device or resource busy
  • 【机器人】复现 SG-Nav 具身导航 | 零样本对象导航的 在线3D场景图提示
  • ​​开放传神创始人论道AI未来|“广发证券—国信中数人工智能赛道专家交流论坛“落幕
  • MySQL——九、锁
  • 【Linux】Ext系列文件系统
  • 卷积神经网络全连接层详解:特征汇总、FCN替代与性能影响分析
  • SRM电子采购管理系统:Java+Vue,集成供应商管理,实现采购流程数字化与协同优化
  • PyQt5完整指南:从入门到实践