视频地址 https://www.bilibili.com/video/bv1Sq4y1377k

从我们学习Java开始,我们就学了很多种操作数据库的方式,最开始的JDBC、后面的JPA、HIbernate、MyBatis,那你是否想过,我们只是简单的写了一个sql,最终是如何到达数据库、返回结果?这中间都经历了什么呢?

不管我们是用原生的JDBC还是后面的ORM框架,我们都会引入这样一个pom文件,这就是MySQL驱动,我们通过这个驱动去连接MySQL

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>
</dependency>

那么看起来就像这样

我们知道,每一个系统都是有并发量的,为了保证系统高效的运行,就注定了不可能是单线程的运行,同样操作数据的时候也是一样,我们学过了很多数据库连接池,C3P0、DBCP、Druid等,这些是在Java这边的连接池,同理数据库层面肯定也不能只是一个线程来执行我们的任务,所以数据库这边也会有对应的连接池。

当然上面是省略了一部分,那就是数据库对你这个连接进行身份校验的操作。

现在想一想,当一个请求到了数据库,数据库收到之后是不是就得分配一个线程,然后去执行这个sql呢?

其实这当然不是了,毕竟数据库是一个系统,它不是人,当我们要去电脑里面找寻某个文件的时候,我们脑海里是知道这个文件在什么的位置的,它叫什么。

同样的系统要把我们的这个请求进行解析,解析成它可以理解的语法,然后再去做相关操作,具体的逻辑顺序如下:

SQL接口

这个sql接口,就是用来接受应用服务器发送的sql

当应用服务器通过连接通道发送sql到数据库后,数据库从连接池里面拿到后,分发一个线程去进行处理,第一步就是把sql交给这个sql接口。

SQL解析器

某种程度上讲,系统和我们人类是类似的,我们的眼睛如同SQL接口获取信息,SQL解析器则如同我们的大脑,对获取的内容进行解析、拆分,然后变成数据库所能理解的内容。

查询优化器

一个简单的sql SELECT name FROM user WHERE id = 1 它可能有多种执行策略:

  • 先查询出全部的 name,然后再取出 id=1 的数据
  • 直接先找寻id=1 的数据,然后再取出它的 name

毫无疑问肯定是第二种策略更好,第一种就是全表扫描了,当然真正的执行策略并不一定就是我这里所说的这样,这只是一个比喻。

一个稍微复杂一点的SQL,它很有可能会有很多种的执行策略,那么这个查询优化器,就会帮助我们来选择一个最合适的策略。

执行器

当优化器选择最合适的执行策略之后,就由执行器去调用对应的引擎去操作硬盘上的数据了。(虽然引擎有很多比如innodb、myisam等,但用的最多的还是innodb了)

buffer pool

在InnoDB引擎下,所有的操作都是先把数据读取到缓冲池(这个就是内存的一块区域),然后在这个区域内进行增删改查操作,之所以这样做是因为在内存操作的性能要远远高于在硬盘中的操作。

理解了上面都执行流程之后,我们只需要记住这个执行链,然后再基于自己的理解就好了

  • SQL接口 > SQL解析器 > 查询优化器 > 执行器 > 调用引擎接口去执行

MySQL执行过程(一条SQL从Java到数据库都经历了什么)相关推荐

  1. MySQL执行过程及执行顺序

    一.MySQL执行过程 MySQL整体的执行过程如下图所示 1 1.1 连接器 1.1.1连接器的主要职责 1.负责与客户端的通信,是半双工模式,这就意味着某一固定时刻只能由客户端向服务器请求或者服务 ...

  2. 深入理解MySQL执行过程及执行顺序

    MySQL在我们的开发中基本每天都要面对的,作为开发中的数据的来源,MySQL承担者存储数据和读写数据的职责.因为学习和了解MySQL是至关重要的,那么当我们在客户端发起一个SQL到出现详细的查询数据 ...

  3. 一张图介绍mysql执行过程

    执行一条update 语句执行过程. 第一步: 建立链接,并验证用户权限 第二步: 查询缓存,如果缓存中存在数据,则直接返回,缓存中不纯在数据,则访问数据库(select) 第三步: 分析器:词语解析 ...

  4. PHP-CRUD-API:将 REST API 添加到 MySQL/MariaDB、PostgreSQL、SQL Server 或 SQLite 数据库的单个文件 PHP 脚本

    https://github.com/mevdschee/php-crud-api 将 REST API 添加到 MySQL/MariaDB.PostgreSQL.SQL Server 或 SQLit ...

  5. 【mysql技术内幕1】mysql基础架构-一条SQL查询语句是如何执行的

    文章目录 1 一条SQL查询语句是如何执行的 2 mysql体系结构 3 InnoDB存储引擎 4 总结 1 一条SQL查询语句是如何执行的 ​ 通常我们使用数据库,都是将数据库看成一个整体,我们的应 ...

  6. java获取mysql执行计划_好程序员Java学习路线之MySQL的执行计划

    好程序员 Java 学习路线之 MySQL 的执行计划.什么是执行计划? 执行计划通常是开发者优化 SQL 语句的第一步. MySQL 在解析 SQL 语句时,会生成多套执行方案,然后内部会进行一个成 ...

  7. .sql文件如何执行_mysql:一条SQL查询语句是如何执行的?

    本篇文章将通过一条 SQL 的执行过程来介绍 MySQL 的基础架构. 首先有一个 user_info 表,表里有一个 id 字段,执行下面这条查询语句: select * from user_inf ...

  8. .sql文件如何执行_一条SQL查询语句是如何执行的?

    导读 Mysql在中小型企业中是个香饽饽,目前主流的数据库之一,几乎没有一个后端开发者不会使用的,但是作为一个老司机,仅仅会用真的不够. 今天透过一个简单的查询语句来讲述在Mysql内部的执行过程. ...

  9. MySQL执行引擎对比与SQL优化

    执行引擎 对于一个中级Java开发者来说SQL优化已经是面试必问了,而最近的一次面试也有问到MySQL执行引擎,还真有点答不上来,话不多说,活到老学到老,又是一波查漏补缺,不得不说路还长. 首先简单了 ...

最新文章

  1. VS2010中“工具选项中的VC++目录编辑功能已被否决”解决方法
  2. 数据挖掘导论读书笔记3--分类
  3. imagick php 缩放,php使用imagick模块实现图片缩放、裁剪、压缩示例
  4. 排序集锦(各种排序算法的特点及性能分析)
  5. Gdevops广州站:大咖齐聚,从事运维和数据库的你不能错过!
  6. 设置导航条上的主题一颜色
  7. 「leetcode」454.四数相加II:其实需要哈希的地方都能找到map的身影
  8. 【数字信号去噪】基于matlab小波软阈值+硬阈值+改进阈值数字信号去噪【含Matlab源码 1025期】
  9. wps将批量数字转换成条形码_excel表格怎么把数据转换条形码-WPS表格中怎么把数字还原成条形码,本来是条形码的。...
  10. 三步使用Docker容器创建RoboCup仿真2D环境
  11. 学机器学习的基础课程
  12. soul从入门到进阶05——soul-bootstrap数据同步流程
  13. 利用计算机专业优势 帮助大家,计算机专业优势学校
  14. 用 Vue 改造 Bootstrap,渐进提升项目框架
  15. 无敌!阿里巴巴开源落地可实操项目:网约车+咚宝商城+英雄传说
  16. 共享链基于区块链技术的共赢社区
  17. 【ISAR成像定标方法(3)—基于SGP4模型的空间目标定标方法MATLAB仿真】
  18. 程导微编MikroElektronika.Compilers.and.Software.Tools.2017.09 11CD
  19. Parasoft参与起草《机器人安全系统编码规则(C++)》正式发布
  20. 调研239款APP后我们发现,新规之下,身份认证要变天?

热门文章

  1. 通往财富自由之路详细笔记(17)
  2. CSP-S2022T1题解
  3. 《融智学进阶文集》01:间接计算模型和间接形式化方法
  4. 妙语佳句 In English
  5. 【案例分享】高效率利器 - SC 频谱分析仪
  6. 【NRF51822】百度手环开源源码分析--框架部分
  7. Java一瓶可乐_Java实现可乐瓶问题
  8. Arya-专业web自动化测试平台
  9. 2019最新Android常用开源库总结(持续更新,建议收藏)
  10. 第十四、十五章NFS和FTP的搭建与配置