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

一条SQL在mysql数据库中经历的过程

    SQL语句在MySQL数据库中普遍经历的过程如下:

  1.     客户端发起查询请求到MySQL数据库服务器监听端口;
  2.     MySQL数据库server端接收到请求;
  3.     server端从已有的连接池或者新建一个线程,用来处理客户端发起的请求;
  4.     server层对请求进行身份认证和权限认证;
  5.     SQL解析器对SQL语句进行词法分析、语法分析以及生成语法树;
  6.     优化器对SQL进行优化,选择最佳执行计划;
  7.     存储引擎层执行SQL后,将查询到的SQL语句返回;
  8.     客户端最终接收到返回的结果集。

    上面只是一条SQL语句普遍经历的过程,select、delete、update、insert语句在MySQL数据库中的执行过程又有什么区别呢?如果SQL带有过滤条件、分组语句、排序语句、join语句,那SQL的执行过程又有何不同呢?

一、select语句在MySQL数据库中经历的过程

    上面的步骤1、2、3不同类型sql都是一样的过程,细微处可能略有差异,比如说用户是通过MySQL客户端发起的请求,通过应用中配置的jdbc发起的请求等,不同实例server端的监听端口也可能不同,客户端可以通过不同机制获取到连接线程,比如说druid连接池等。server端接受到请求后会验证发起请求的客户端是否通过身份认证、是否具有对查询对象的权限,都通过后才会正式开始执行sql。

    从第5步开始,我们假设一条select语句主体内容如下:

    select age,name from users where age > 20 group by age order by age limit 50;

    SQL解析器首先对提取处select语句中的语法关键词,select、from、where、group  by、order by、limit等,然后对语法进行分析,比如说符号是否正确、查询的列是否存在、表是否存在,接着生成语法分析树。

    优化器可能对SQL进行改写,如in转换为exists,或者or转换为union等,接着优化器基于统计信息选择成本最小的执行计划,比如说是走索引或者是全表扫描。如果是从大量数据中查询少量数据,可能就是走索引,优化器会预估不同执行计划的成本。

     select优化后最终到存储引擎层开始执行,假设这里存储引擎用的是innodb,innodb会首先到内存中去寻找要查找行记录所在的数据页,通过innodb中的一个哈希表快速判断对应的数据页id是否存在,如果不存在,则会通过B+树索引,最终定位到需要查找的数据的地址,然后将数据页加载到内存中,再通过二分查找法找到对应的行记录。

    存储引擎根据过滤条件,过滤出要查找的记录,如果使用了limit 50语句,则只会过滤出50行数据返回到server层。

    server层根据order by和group by语句,对结果集进行排序和分组。如果结果集比较大,内存中放不下,则会使用临时表来存放分组结果和排序结果,结果集最终返回到客户端。

相关文章:

  • VUE管理后台开发-vue-element-admin
  • 字符串模板(单文件组件、JSX)
  • IDEA+Docker插件一键部署SpringBoot项目到远程服务器
  • Three.js 阴影 (Shadow) 知识点整理
  • 图论入门【数据结构基础】:什么是树?如何表示树?
  • Redis——事务实现以及应用场景
  • 网络核心技术术语大全(2025版)
  • 机器学习——数据清洗(缺失值处理、异常值处理、数据标准化)
  • 设计模式之装饰器模式:原理、实现与应用
  • STC89C52单片机学习——第25节: [11-1]蜂鸣器
  • GitHub Copilot两期连看:开发流程全览及 Copilot 在 SQL 开发中的妙用
  • 【数据分享】2000—2024年我国省市县三级逐年归一化植被指数(NDVI)数据(年最大值/Shp/Excel格式)
  • 【云原生之kubernetes实战】在k8s环境中高效部署minio对象存储(详细教程)
  • Cursor IDE 入门指南
  • 个人学习编程(3-18) leetcode刷题
  • C++动态规划从入门到精通
  • Docker Desktop配置国内镜像源教程
  • k8s中PAUSE容器与init容器比较 local卷与hostpath卷比较
  • 【css酷炫效果】纯CSS实现波浪形分割线
  • Ubuntu24.04安装ROS2 Jazzy
  • 解放日报:浦东夯实“热带雨林”式科创生态
  • 解放日报:让算力像“水电煤”赋能千行百业
  • 体坛联播|欧冠巴萨3比3战平国米,柯洁未进入国家集训队
  • 摩天大楼天津117大厦复工背后:停工近十年,未知挑战和压力仍在
  • 深观察丨从“不建议将导师挂名为第一作者”说开去
  • 百年传承,再启新程,参天中国迎来2.0时代