| |
|
开发:
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, 不完整就回滚事务。 总结:
SQL执行顺序sql语句执行顺序: 1、最先执行from tab; 2、where语句是对条件加以限定; 3、分组语句【group by…… having】; 4、聚合函数; 5、select语句; 6、order by排序语句; 7、having语句; |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |