MySQL执行过程(一条SQL从Java到数据库都经历了什么)
视频地址 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到数据库都经历了什么)相关推荐
- MySQL执行过程及执行顺序
一.MySQL执行过程 MySQL整体的执行过程如下图所示 1 1.1 连接器 1.1.1连接器的主要职责 1.负责与客户端的通信,是半双工模式,这就意味着某一固定时刻只能由客户端向服务器请求或者服务 ...
- 深入理解MySQL执行过程及执行顺序
MySQL在我们的开发中基本每天都要面对的,作为开发中的数据的来源,MySQL承担者存储数据和读写数据的职责.因为学习和了解MySQL是至关重要的,那么当我们在客户端发起一个SQL到出现详细的查询数据 ...
- 一张图介绍mysql执行过程
执行一条update 语句执行过程. 第一步: 建立链接,并验证用户权限 第二步: 查询缓存,如果缓存中存在数据,则直接返回,缓存中不纯在数据,则访问数据库(select) 第三步: 分析器:词语解析 ...
- 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 ...
- 【mysql技术内幕1】mysql基础架构-一条SQL查询语句是如何执行的
文章目录 1 一条SQL查询语句是如何执行的 2 mysql体系结构 3 InnoDB存储引擎 4 总结 1 一条SQL查询语句是如何执行的 通常我们使用数据库,都是将数据库看成一个整体,我们的应 ...
- java获取mysql执行计划_好程序员Java学习路线之MySQL的执行计划
好程序员 Java 学习路线之 MySQL 的执行计划.什么是执行计划? 执行计划通常是开发者优化 SQL 语句的第一步. MySQL 在解析 SQL 语句时,会生成多套执行方案,然后内部会进行一个成 ...
- .sql文件如何执行_mysql:一条SQL查询语句是如何执行的?
本篇文章将通过一条 SQL 的执行过程来介绍 MySQL 的基础架构. 首先有一个 user_info 表,表里有一个 id 字段,执行下面这条查询语句: select * from user_inf ...
- .sql文件如何执行_一条SQL查询语句是如何执行的?
导读 Mysql在中小型企业中是个香饽饽,目前主流的数据库之一,几乎没有一个后端开发者不会使用的,但是作为一个老司机,仅仅会用真的不够. 今天透过一个简单的查询语句来讲述在Mysql内部的执行过程. ...
- MySQL执行引擎对比与SQL优化
执行引擎 对于一个中级Java开发者来说SQL优化已经是面试必问了,而最近的一次面试也有问到MySQL执行引擎,还真有点答不上来,话不多说,活到老学到老,又是一波查漏补缺,不得不说路还长. 首先简单了 ...
最新文章
- VS2010中“工具选项中的VC++目录编辑功能已被否决”解决方法
- 数据挖掘导论读书笔记3--分类
- imagick php 缩放,php使用imagick模块实现图片缩放、裁剪、压缩示例
- 排序集锦(各种排序算法的特点及性能分析)
- Gdevops广州站:大咖齐聚,从事运维和数据库的你不能错过!
- 设置导航条上的主题一颜色
- 「leetcode」454.四数相加II:其实需要哈希的地方都能找到map的身影
- 【数字信号去噪】基于matlab小波软阈值+硬阈值+改进阈值数字信号去噪【含Matlab源码 1025期】
- wps将批量数字转换成条形码_excel表格怎么把数据转换条形码-WPS表格中怎么把数字还原成条形码,本来是条形码的。...
- 三步使用Docker容器创建RoboCup仿真2D环境
- 学机器学习的基础课程
- soul从入门到进阶05——soul-bootstrap数据同步流程
- 利用计算机专业优势 帮助大家,计算机专业优势学校
- 用 Vue 改造 Bootstrap,渐进提升项目框架
- 无敌!阿里巴巴开源落地可实操项目:网约车+咚宝商城+英雄传说
- 共享链基于区块链技术的共赢社区
- 【ISAR成像定标方法(3)—基于SGP4模型的空间目标定标方法MATLAB仿真】
- 程导微编MikroElektronika.Compilers.and.Software.Tools.2017.09 11CD
- Parasoft参与起草《机器人安全系统编码规则(C++)》正式发布
- 调研239款APP后我们发现,新规之下,身份认证要变天?