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执行过程 -> 正文阅读

[大数据]聊聊mysql执行过程

?

在项目开发当中 ,很多时候,我们的数据库应用优化都是从表层到里层的一个过程。比如一个查询写下来?,我们的优化方向大多时候都是先看方法执行的时间长短,然后再决定是否去优化它,下意识的第一步操作都是看是否命中索引,接下去再看数据量、设计是否合理。。。等等。

那么其实在我们一开始的时候,如果我们事先知道数据库的一个执行流程,我们就可以按照他的规则去写sql,进而提高性能和开发效率。

这点有点像前些年 我们国家做出口的时候??开始的时候没有吃透人家的一些法律规则 导致出现违规不合格的情况? 进而被退货造成损失。所以熟悉游戏规则很重要。

很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的合理方式运行而已。比如索引。


下面看下一条sql 的执行过程。分为5个步骤。
?

图片来源网络

1、连接器

负责与客户端的通信,是半双工模式,这就意味着某一固定时刻只能由客户端向服务器请求或者服务器向客户端发送数据,而不能同时进行,其中mysql在与客户端连接TC/IP的;

验证请求用户的账户和密码是否正确;

如果用户的账户和密码验证通过,会在mysql自带的权限表中查询当前用户的权限:

说白了,就是我们的数据库连接串连接到数据库的过程。

2、缓存

? ? mysql的缓存主要的作用是为了提升查询的效率,缓存以key和value的哈希表形式存储,key是具体的sql语句,value是结果的集合。如果无法命中缓存,就继续走到分析器的的一步,如果命中缓存就直接返回给客户端 。,目前在5.6的版本中已经默认关闭了。如果读写很频繁的话,依赖命中率低,二来频繁的缓存操作反而性能更低。

3、分析器

? ?分析器的主要作用是将客户端发过来的sql语句进行分析,这将包括预处理与解析过程,在这个阶段会解析sql语句的语义,并进行关键词和非关键词进行提取、解析,并组成一个解析树。如果分析到语法错误,会直接给客户端抛出异常。就是一个sql格式化的过程。

4、优化器

这部主要是进行sql语句的优化,会根据执行计划进行最优的选择,匹配合适的索引,选择最佳的执行方案。

比如一个典型的例子是这样的:

表T,对A、B、C列建立联合索引,在进行查询的时候,当sql查询到的结果是:select xx where ?B=x and A=x and C=x.很多人会以为是用不到索引的,但其实会用到,虽然索引必须符合最左原则才能使用,但是本质上,优化器会自动将这条sql优化为:where A=x and B=x and C=X,这种优化会为了底层能够匹配到索引,同时在这个阶段是自动按照执行计划进行预处理,mysql会计算各个执行方法的最佳时间,最终确定一条执行的sql交给最后的执行器。

所以我们在写sql的时候,最好是按照建立好的索引顺序来添加查询条件,等于就省去了优化的时候,进而提高效能。

5、执行器

?在执行器的阶段,此时会调用存储引擎的API,API会调用存储引擎,常用的是myisam和innodb:

myisam 不支持事务?,不支持行锁,支持表锁,适合读多写少。

innodb ?支持行锁 表锁,支持事务。应该是用的最多的存储引擎,也是mysql默认的存储引擎。

终上所述

客户端 ----> 连接器 ----> 缓存 ----> 分析器 ----> 优化器 ----> 执行器 ----> 存储引擎 ----> 客户端

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-05 21:48:17  更:2022-02-05 21:50:45 
 
开发: 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 13:56:23-

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