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 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQl 面试重点_1. 一条SQL语句的具体执行过程 -> 正文阅读

[大数据]MySQl 面试重点_1. 一条SQL语句的具体执行过程

一, MySQL基础架构分析

1.1 MySQL基本架构组件概览

组件大致功能
连接器身份验证和权限相关(登录时)
查询缓存执行查询语句时, 会先查询缓存(MySQL 8.0移除)
分析器没有命中缓存, 经过分析器(词法分析, 语义分析)
优化器生成SQL语句的最优执行计划
执行器操作引擎,返回查询结果

在这里插入图片描述

简单来说, MySQL主要分为Server层和存储引擎层:

  1. Server层: 主要包括连接器, 查询缓存, 分析器, 优化器等. 所有跨存储引擎的功能都在这一层实现,

比如存储过程, 触发器, 视图, 函数等等, 还有一个通用的日志模块-binlog日志模块;

  1. 存储引擎: 主要负责引擎的存储和读取, 采用可以替换的插件式架构, 支持InnoDB, MyISAM, Memory等多个存储引擎.

其中 InnoDB 引擎有自有的日志模块 redolog 模块。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始就被当做默认存储引擎了。

1.2 Server层基本组件介绍

  1. 连接器(身份验证和查询权限)

验证用户名和密码是否正确(数据库mysql的user表中进行验证),如果错误返回错误通知(deAcess nied for user ‘root’@‘localhost’(using password:YES)),如果正确,则会去 mysql 的权限表(mysql中的 user、db、columns_priv、Host 表,分别存储的是全局级别、数据库级别、表级别、列级别、配合 db 的数据库级别)查询当前用户的权限

  • 注意: 本次数据库连接不断开的话, 即便是此时修改了权限也不会生效;
  1. 查询缓存(MySQL 8.0后移除)

查询缓存,存储的数据是以键值对的形式进行存储(key是查询语句, value是执行结果),

  • 如果开启了缓存,那么在一条查询sql语句进来时会先判断缓存中是否包含当前的sql语句键值对,如果存在直接将其对应的结果返回,如果不存在再执行后面一系列操作。如果没有开启则直接跳过。

  • 由于查询缓存前后两条查询SQL必须完全一致。, 查询语句中含有一些不确定的值时,则不会缓存, 如果表更改,则使用该表的所有高速缓存查询都变为无效并从缓存中删除, 所以查询缓存非常容易失效;

  1. 分析器(分析SQL是来干嘛的, 词法分析和语法分析)

未命中缓存, 就由分析器对SQL进行分析, 分析SQl语句是来干嘛的
- 第一步: 词法分析(提取关键字)
- 第二步: 语法分析(判断sql是否符合语法), 分析到语法错误,会直接抛给客户端异常:ERROR:You have an error in your SQL syntax.

  1. 优化器(设计最优的SQL执行方案)

优化器的作用是确定最优的执行方案;比如多个索引的时候如何选择索引, 多表关联查询的时如何选择连接顺序等等

  1. 执行器(调用存储引擎接口, 返回执行结果)

MySQL 通过分析器知道了你要做什么,通过优化器知道了该怎么做,于是就进入了执行器阶段,开始执行语句。

  • 开始执行的时候,要先判断一下你对这个表 有没有执行对应操作的权限,如果没有,就会返回没有权限的错误;如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。

  • 如果表没有索引,会从第一行一行一行地读取,根据where后面的条件是否满足,如果有索引则会根据索引的规则去寻找,然后执行生成结果集。

二, 结合🌰说一说查询,更新的过程

2.1 查询语句的执行过程

在这里插入图片描述

2.2 更新语句的执行流程

与查询流程不一样的是,更新流程还涉及两个重要的日志模块,redo log(重做日志)binlog (归档日志)

在这里插入图片描述

在这里插入图片描述

更新语句的具体执行流程

在这里插入图片描述

在这里插入图片描述

三, 凝练总结

在这里插入图片描述

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

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:08:10-

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