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

server/2025/2/5 16:21:50/

文章目录

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

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

sql">select * from product where id = 1;

对于sql>mysql架构分层:

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

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

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

第一步建立连接

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

msyql -u root -p在输入对应的密码就登录成功了

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

show processlist;

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

连接数太多了

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

第二部解析 SQL

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

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

第二个进行语法的分析:

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

构成一个这样的语法树。

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

sql_75">第三步执行 sql

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

预处理

预处理阶段:

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

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

优化阶段

优化阶段:

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

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

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

执行阶段

执行阶段:

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

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

索引下推

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

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

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


http://www.ppmy.cn/server/165177.html

相关文章

Image Resize:强大的在线图像处理工具

Image Resize 是一款免费的在线批量图像处理工具,让你轻松调整图像大小、裁剪、压缩,支持多种格式。 批量处理:一次编辑多个图像,提高工作效率。多种格式支持:支持PNG、JPG等多种常见图像格式,满足不同需求…

Codeforces Round 1002 (Div. 2)(部分题解)

补题链接 A. Milya and Two Arrays 思路&#xff1a;题意还是比较好理解&#xff0c;分析的话我加了一点猜的成分&#xff0c;对a&#xff0c;b数组的种类和相加小于4就不行&#xff0c;蒋老师的乘完后小于等于2也合理。 AC代码&#xff1a; #include <bits/stdc.h> u…

【CPP】迭代器失效问题 static和inline

文章目录 迭代器失效**常见的迭代器失效场景**1. **std::vector**2. **std::deque**3. **std::list**4. **std::map / std::set**5. **std::unordered_map / std::unordered_set** **总结&#xff1a;迭代器失效场景****如何避免迭代器失效&#xff1f;** static 和 inline1. s…

【黄啊码】常用AIGC办公工具大全

工具名称&#xff1a;办公小浣熊 功能简介&#xff1a;办公小浣熊是一款智能办公助手&#xff0c;专注于提升办公效率。它支持文档生成、数据分析、PPT制作等多功能&#xff0c;通过自然语言交互&#xff0c;帮助用户快速完成复杂任务。无论是撰写报告、整理数据&#xff0c;还…

寒假(一)

请使用消息队列实现2个终端之间互相聊天 终端一 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h&g…

LVGL+FreeRTOS实战项目:智能健康助手(lcd篇)

1.8寸彩色TFT显示屏简介 接线图 我们选用的是分辨率为128*160的彩色显示屏&#xff0c;采用的SPI接口&#xff0c;通过我们STM32的SPI外设&#xff0c;来和我们的屏幕进行通信&#xff0c;以显示我们需要显示的图片。 软件部分 #include "lcd_driver.h"//液晶IO初始…

DNS缓存详解(DNS Cache Detailed Explanation)

DNS缓存详解 清空DNS缓存可以让网页访问更快捷。本文将从什么是DNS缓存、为什么清空DNS缓存、如何清空DNS缓存、清空DNS缓存存在的问题四个方面详细阐述DNS缓存清空的相关知识。 一、什么是DNS缓存 1、DNS缓存的定义&#xff1a; DNS缓存是域名系统服务在遇到DNS查询时自动…

计算机网络中常见高危端口有哪些?如何封禁高危端口?

保障网络安全&#xff0c;从封禁高危端口开始&#xff01; 在计算机网络中&#xff0c;端口是设备与外界通信的“大门”&#xff0c;但某些端口因常被黑客利用而成为高危入口。封禁这些端口是防御网络攻击的关键一步。本文将详解 10个常见高危端口&#xff0c;并提供多平台封禁…