IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> SQL执行过程与SQL执行顺序(Mysql) -> 正文阅读

[大数据]SQL执行过程与SQL执行顺序(Mysql)

SQL执行过程

?MySQL服务器逻辑架构

?根据上图我们可以知道MySQL服务器逻辑架构自上向下可分为三层:

①处理客户端连接、授权认证。

②Server层,负责查询语句的解析、优化、缓存以及内置函数的实现、存储过程等。

? ? ? ? 1)连接器:登录MySQL身份认证和权限

? ? ? ? 2)查询缓存:执行查询语句前,先查询缓存(Mysql8.0后已移除)

? ? ? ? 3)分析器:没有命中缓存,SQL会进行词法、语法分析。

? ? ? ? 4)优化器:按照Mysql认为的最优方案执行

? ? ? ? 5)执行器:进行语句执行,从存储引擎返回数据。

所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、试图、函数、还有一个通用的日志模块binlog日志模块。

③存储引擎,负责Mysql中数据的存储和提取。事务由存储引擎实现。InnoDB存储引擎支持事务。

?InnoDB整体架构分为两部分: 内存架构和磁盘架构。

执行过程举例

1.查询语句

select * from student ?stu where stu.age = '18' and stu.name ='张三';

?流程:

1.先检查语句是否有权限 没有权限直接返回错误信息;

2.有权限则在mysql8.0前先查询缓存,以这条sql语句为key在内存中查询是否存在结果,有的话直接使用缓存;

3.没有则通过分析器进行词法分析,提取select 表名student,字段名查询条件等;还会进行语法分析检查关键字是否正确等;

4.优化器根据自己的优化算法选择执行效率最好的一个方案(只是优化器认为,不一定最好);

5.进行权限校验,没权限返回错误信息,有权限则调用数据库引擎接口,返回引擎的执行结果。

2.更新语句(增、删、改)

update student ?stu set stu.age = '19' where stu.name ='张三';

这里对张三的年龄进行一个修改,流程与查询流程大致相同,但是执行更新的时候会记录日志,这就会引入日志模块了。mysql自带日志模块binlog(归档日志,在Server层),所有存储引擎都可以使用,InnoDB还自带了一个日志模块redo log(重做日志),以InnoDB为例,流程如下:

先查询到张三这一条数据,缓存命中则使用缓存

拿到查询的语句 把age改为19

调用引擎API接口,写入这一行数据,InnoDB引擎把数据保存在内存中,同时记录redo log

此时redo log进入prepare状态,然后告诉执行器,执行完成了,随时可以提交。

执行器收到通知后记录binlog,然后调用引擎接口,提交redo log为提交状态

更新完成

面试:

假设 redo log 处于预提交状态,binglog 也已经写完了,这个时候发生了异常重启会怎么样呢?

(数据一致性问题)

?这个就要依赖于?MySQL 的处理机制了。

1)MySQL首先会判断edo log 是否完整,如果判断是完整的,就立即提交

2)如果 redo log 只是预提交但不是 commit 状态,这个时候就会去判断 binlog 是否完整,如果完整就提交 redo log, 不完整就回滚事务。

总结:

  • MySQL 主要分为 Server 层和引擎层,Server 层主要包括连接器、查询缓存、分析器、优化器、执行器,同时还有一个日志模块(binlog),这个日志模块所有执行引擎都可以共用,redolog 只有 InnoDB 有。

  • 引擎层是插件式的,目前主要包括,MyISAM,InnoDB,Memory 等。

  • 查询语句的执行流程如下:权限校验(如果命中缓存)---》查询缓存---》分析器---》优化器---》权限校验---》执行器---》引擎

  • 更新语句执行流程如下:分析器----》权限校验----》执行器---》引擎---redo log(prepare 状态---》binlog---》redo log(commit状态)

SQL执行顺序

sql语句执行顺序:

1、最先执行from tab;

2、where语句是对条件加以限定;

3、分组语句【group by…… having】;

4、聚合函数;

5、select语句;

6、order by排序语句;

7、having语句;

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 00:59:31  更:2022-09-30 01:01:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 -2025/4/24 18:16:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码