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

MYSQL--一条SQL执行的流程,分析MYSQL的架构

文章目录

      • 第一步建立连接
      • 第二部解析 SQL
      • 第三步执行 sql
        • 预处理
        • 优化阶段
        • 执行阶段
        • 索引下推

执行一条select 语句中间会发生什么? 这个是对 mysql 架构的深入理解。

select * from product where id = 1;

对于mysql的架构分层:

mysql 架构分成了 Server 层和存储引擎层:

Sever 层 负责建立连接、分析和执行 sql 语句。 一些核心功能模块比如解析器生成语法树,预处理器、优化器、执行器这些。

在存储引擎层:支持 InnoDB 存储引擎。底层使用的是 B+树。mysql5.5 之后 InnoDb 成为默认的存储引擎了。

第一步建立连接

通过连接器和 mysql 的客户端建立连接,连接的过程需要使用 TCP 三次握手。

msyql -u root -p

在输入对应的密码就登录成功了

查看 mysql 当前有多少连接数量:

show processlist;

执行了一次查询就算建立连接了,连接默认是八个小时,超过这个数量就会自动的断开。

连接数太多了

删除了查询缓存,在 mysql8 之前有缓存的内容。

第二部解析 SQL

解析器会做两件事情,第一个是词法分析:

mysql 会根据你输入的字符串识别出关键字出来,比如 select username from userinfo 会解析出来 4 个 token,有两个 key word,是 select 和 from。

第二个进行语法的分析:

根据词法分析的结果,语法解析器根据语法规则判断输入的 sql 是否满足 MYSQL 的语法。没有问题就构建出来 sql 语法树。

构成一个这样的语法树。

https://blog.csdn.net/zhang24360/article/details/128963299 语法树的详细内容

第三步执行 sql

分为三个阶段 预处理 优化阶段 执行阶段

预处理

预处理阶段:

检查 sql 查询语句中的表或者字段是否存在。

将 select * 中的*符号扩展为表上的所有列。

优化阶段

优化阶段:

需要确定一个执行计划,比如现在有多个索引到底用哪一个索引。确定 sql 查询语句的执行方案。

想要知道选择哪个索引可以在查询语句之前加一个 explain 命令,会展示书 sql 语句的查询计划。

查询主键索引 B+树的成本会高于查询二级索引 B+树的成本,优化器会基于查询成本考虑选择代价最小的普通索引。

执行阶段

执行阶段:

这个时候 server 层要去和存储引擎层进行交互了:

比如有 全表扫描、主键索引查询、索引下推。

索引下推

索引下推是减少二级索引的回表查询操作,提高查询的效率。将 Server 层做的一些事情交给了存储引擎层去做。

查询 age>20 的时候遇到>联合索引就会失效了,这个时候就需要回表查询 reward 是否是等于 1000 的。

这样效率太慢了,直接在存储引擎层去判断 reward 是否等于 1000. 如果成立在回表给 Server 层操作。


http://www.kler.cn/a/527541.html

相关文章:

  • jinfo命令详解
  • docker安装nacos2.2.4详解(含:nacos容器启动参数、环境变量、常见问题整理)
  • 【B站保姆级视频教程:Jetson配置YOLOv11环境(五)Miniconda安装与配置】
  • Oracle Primavera P6 最新版 v24.12 更新 2/2
  • WGCLOUD服务器资源监控软件使用笔记 - Token is error是什么错误
  • JAVA(SpringBoot)集成Kafka实现消息发送和接收。
  • Privacy Eraser,电脑隐私的终极清除者
  • 基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF
  • APT (Advanced Package Tool) 安装与使用-linux014
  • C++初阶 -- 初识STL和string类详细使用接口的教程(万字大章)
  • 简单的爱心跳动表白网页(附源码)
  • 在本地部署DSR1模型的技术方案和步骤指南
  • PCA9685 一款由 NXP Semiconductors 生产的 16 通道、12 位 PWM(脉宽调制)控制器芯片
  • 基于 yolov8_pyqt5 自适应界面设计的火灾检测系统 demo:毕业设计参考
  • Keepalived高可用集群企业应用实例一
  • 字符串p型编码(信息奥赛一本通1145)
  • 数据结构:栈篇
  • 【算法】分治
  • 常用Android模拟器(雷电 MuMu 夜神 Genymotion 蓝叠) - 20250131
  • 基于LLM的垂直领域问答方案
  • 深入理解 C# 与.NET 框架
  • windows电脑运行日志用户行为记录查看和清理工具
  • 【字符串两大注意事项】
  • CF EDU ROUND 171
  • Memcached add 命令详解
  • 计算机网络之计算机网络的分类