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 执行一条语句的过程

执行流程:

  • 如下图:当向mysql发送一条请求时,MySQL到底做了什么?
    在这里插入图片描述
    客户端发送一条查询给服务器;
    服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果,否则进入下一阶段;
    服务端进行sql解析,预处理,在由优化器生成对应的执行计划;
    MySQL根据优化器生成的执行计划,调用存储引擎的api来执行查询;
    将结果返回客户端;

查询缓存:

	在解析一个查询语句之前,如果查询缓存是打开的,那么mysql会优先检查这个查询是否命中缓存中的数据,这个检查是通过一个队大小写敏感的哈希查找实现的。查询和缓存中的查询字段即使有一个字节不同,那么也不会匹配缓存结果。
	如果当前的查询恰好命中了缓存,那么在返回结果之前会检查一次用户权限。、这仍然是无需解析查询sql语句的,因为在查询缓存中已经存放了当前查询需要访问的表信息。如果权限没问题,MySQL会跳过其他阶段,直接冲缓存中拿到结果并返回给客户度Jan。跳过了解析 优化和执行截断。
	查询缓存系统会跟踪查询中涉及的每一个表,如果这些表发生变化,那么和这个表相关的所有缓存数据将失效,这种机制效率看起来比较低,因为数据变化时很有可能对应的查询结果没有变更,但是这种简单实现代价很小,而这点对于非常繁忙的系统来说非常重要;

有关查询缓存的配置

query_cache_type 是否打开查询缓存;
query_cache_size 查询缓存使用的总内存空间,单位是字节;
query_cache_min_res_unit 在查询缓存中分配内存块时最小单位
query_cache_limit Mysql 能够缓存的最大查询结果,如果查询结果大于这个值,则不会被缓存;

语法解析器和预处理

	首先,MySQL通过关键字将sql语句进行解析,并生成一棵对应的解析树。mysql解析器将使用mysql语法规则验证和解析查询。例如。他将验证是否使用了错误的关键字等;
	预处理器则根据一些mysql规则进一步检查解析树是否合法,例如:这里将检查数据表和数据列是否存在;
	下一步会验证权限;

查询优化器

现在的语法树认为是合法的了,并且由优化器将其转为执行计划,一条查询可以有很多执行方式,最后都返回相同的结果,优化器的作用就是找到这其中最好的执行计划;
msyql使用基于成本的优化器,他将尝试预测一个查询使用某种执行计划时的成本,并选择一个成本最小的一个;
mysql查询优化器在生成查询的执行计划时,需要向存储引擎获取相应的统计信息,存储引擎则提供给优化器对应的统计信息,包括:每个表或者索引有多少个页面,每个表的每个索引的技术是多少,数据行和索引长度,索引的分布信息等,优化器根据这信息来选择最优的执行计划;

查询执行引擎

相对于查询优化阶段,查询执行截断不是那么复杂;MySQL只是简单的根据执行计划给出的命名逐步执行,在根据计划逐步执行的过程中,有大量的操作需要通过调用存储引擎实现的接口实现来完成;

返回结果给客户端

查询执行的最后一个阶段是将结果返回客户端。即使查询不需要返回结果集给客户端,MySQL仍然会返回这个查询的一些信息,如该查询影响到的行数;
如果查询结果可以被缓存,那么mysql在这个阶段也会将结果存放到查询缓存中;

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

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