mysql查询解析过程_MySQL查询执行过程详解
查询是用户通过设置某些查询条件,从表或其他查询中选取全部或者部分数据,以表的形式显示数据供用户浏览。查询是一个独立的、功能强大的、具有计算功能和条件检索功能的数据库对象。MySQL数据库中,MySQL查询同样是数据库的核心操作,下面我们一起来看看MySQL查询执行过程分为那几个步骤?
一、执行一个查询过程概述
1.客户端发送一条查询给服务器;
2.服务器先检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果。否则进入下一阶段;
3.服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划;
4.MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询;
5.将结果返回给客户端;
二、查询缓存
1.查询缓存保存查询返回的完整结构;
2.命中查询缓存时,MySQL会立即返回结果,跳过解析、优化和执行阶段;
3.查询缓存系统会跟踪查询中设计的每个表,如果这些表发生变化,和这个表相关的所有缓存数据都将失效;
4.判断缓存是否命中时,不会进行解析查询语句,直接使用MySQL语句和客户端发送过来的其他原始信息,任何字符上的不同,例如空格、注解等,都会导致缓存不命中;
5.当查询语句有一些不确定的数据时,则不会被缓存;
6.查询缓存配置参数
三、语法解析器和预处理器
1.MySQL解析器通过关键字将SQL语句进行解析,并生成对应的解析树;
2.MySQL解析器将使用MySQL语法规则验证和解析查询,eg:验证是否使用错误的关键字、使用关键字的顺序是否正确、验证引号是否前后匹配等;
3.预处理器根据一些MySQL规则进行进一步检查解析树是否合法,eg:检查数据表和数据列是否存在,解析名字和别名是否有歧义;
4.下一步预处理器验证用户权限,查看用户是否有操作权限,通常很快;
四、查询优化器
1.优化器的作用就是找到最好的执行计划;
2.语法树被认为是合法后,优化器将MySQL语句转换为执行计划,一条查询可以有多种执行方式,最后都返回相同的结果;
3.生成执行计划过程
4.MySQL使用基于成本的优化器(CBO cost-based optimizer),会预测一个查询使用某种执行计划的成本,选择其中成本最小的一个;
5.导致MySQL优化器选择非最优执行计划的原因
6.MySQL可以处理的优化类型
五、查询执行引擎
1.查询执行引擎根据执行计划来完成整个查询;
2.执行计划是一个数据结构(指令树),不是和其他关系型数据库那样生成对应的字节码;
3.mysql根据执行计划给出的指令逐步执行,在执行过程中,有大量的操作需要调用存储引擎实现的接口来完成,这些接口即为“handler API”;
4.查询中每一个表由一个handler的实例表示。在优化阶段mysql就为每一个表创建了一个handler实例,优化器可以根据这些实例的接口获取表的相关信息,eg:列名、索引、统计信息等;
六、返回客户端结果
1.如果查询可以被缓存,mysql会在这个阶段将结果存放到查询缓存中;
2.mysql将结果集返回给客户端是一个增量逐步返回的过程,在查询生成第一条结果时,mysql就可以开始向客户端逐步返回结果了;
3.增量逐步返回的好处:服务端无须存储太多的结果,不会因为返回太多的结果而消耗太多内存;同时让客户端第一时间获得返回结果;
4.结果集中的每一行都会以一个满足mysql客户端/服务端通信协议的包发送,再通过tcp协议进行传输,传输过程中,可能对mysql的包进行缓存然后批量传输;
从以上内容可以看出MySQL查询执行过程包括6个方面的内容,这6个方向缺一不可,当然在MySQL数据库中,SQL语言提供了SELECT语句进行数据库的查询,该语句具有灵活的使用方式和丰富的功能。MySQL数据库中,各种各样的查询语句也是十分重要的考点,小伙伴们可以在本站的MySQL教程中找到许多面试题,在学习的同时还能随时检验自己的能力,何乐而不为!
相关文章:

.net erp(办公oa)开发平台架构之流程服务概要介绍
背景 搭建一个适合公司erp业务的开发平台。 架构概要图: 流程引擎开发平台: 包含流程引擎设计器,流程管理平台,流程引擎服务。目前只使用单个数据库进行管理。 流程引擎设计器 采用silverlight进行开发,本质是对流程…

数据分析-pca协方差
协方差是反映的变量之间的二阶统计特性,如果随机向量的不同分量之间的相关性很小,则所得的协方差矩阵几乎是一个对角矩阵。转载于:https://www.cnblogs.com/erweiyang/archive/2012/09/08/2676997.html

在javascript中判断类型
String 一个字符串始终是一个字符串,所以这一块是很容易。除非使用new(new String)调用,否则typeof将返回“object”。所以也要包含那些可以使用的字符串instanceof。 // Returns if a value is a string function isString (valu…

mysql中日期判断的函数_MySql判断汉字、日期、数字的函数
几个平常用的mysql函数 /***************************************************** 1.判断字符串是否为汉字 返回值:1-汉字 0-非汉字 *****************************************************/ DROP FUNCTION IF EXISTS fc_is_hanzi; CREATE FUNCTION fc_is_h几个平常…

c#.net调用pdf2swf.exe将pdf文件转换为swf,vs中运行正常,布署IIS服务器部署转换后文字部分为空白...
这个是权限问题, 需要在应用程序池中高级设置,将标识改为LocalSystem 转载于:https://www.cnblogs.com/shy1766IT/p/5114971.html

云计算开发要学习哪些东西?云计算开发的内容
云计算是一种基于互联网的计算方式,要实现云计算则需要一整套的技术架构去实施,包括网络、服务器、存储、虚拟化等等。 云计算目前分为公有云和私有云。两者的区别只是提供的服务的对象不同,一个是企业内部使用,一个则是面向公众。…

XHTML+CSS3(Chapter 1)
HTML5 Reference document: http://www.w3school.com.cn/html5/html_5_intro.asp 1. Use <video> to display some video in html (mp4. ogg.) <video src"movie.ogg" controls"controls"> </video> 2. Use <audio> to play …

oracle重建实例_记一次误删Oracle控制文件并恢复过程
概述当你在数据库运行时误删除了控制文件怎么办?很不幸有一次我就有这个情况,虽然是测试环境,这里因为我有事先把控制文件分别备份,所以恢复还是比较简单的。下面简单记录下怎么恢复。问题控制文件版本不一致一般是因为在实例运行时删除了控制…

成都Uber优步司机奖励政策(1月9日)
1月9日 奖励政策滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfryf/p/4612609.html 优步奖励低/不挣钱/怎么办?看这里:http://www.c…

vim-map
vim-map 软件版本: ubuntu10.04 Linux version 2.6.32-42-generic VIM - Vi IMproved 7.2目录: 1. 简介 2. 映射与运行模式的关系 3. 例子 4. 其他 1. 简介 如果想让 vim 成为你手中的利器,vim 的 map 功能就不得不学&…

Java并发面试,幸亏有点道行,不然又被忽悠了
2019独角兽企业重金招聘Python工程师标准>>> 前言 面试Java,必然要被问Java内存模型和Java并发开发。我被问到的时候,心里慌得一批,“额,是在《Thinking in Java》里面写的吗?果然每天增删改太low了” 要了…

mysql减少锁等待_降低锁竞争 减少MySQL用户等待时间
【IT168 技术】通过锁机制,可以实现多线程同时对某个表进行操作。如下图所示,在某个时刻,用户甲、用户乙、用户丙可能会同时或者先后(前面一个作业还没有完成)对数据表A进行查询或者更新的操作。当某个线程涉及到更新操作时,就需要…
UML中的六种关系的比较与学习
通过不断的学习并绘制UML图,整个画图的过程中深刻体会到其核心部分还是理解事物之间的关系,总结六大关系来深入学习,主要关系有六种:继承、实现、依赖、关联、聚合、组合。 区别于联系: 1.继承(泛华&#x…

spark—3(Spark Scheduler)
2019独角兽企业重金招聘Python工程师标准>>> Spark的核心是根据RDD来实现的,Spark Scheduler则为Spark核心实现的重要一环,其作用就是任务调度。Spark的任务调度就是如何组织任务去处理RDD中每个分区的数据,根据RDD的依赖关系构建…

Tomcat手动配置简述【查询留存】
一、设置JAVA的环境变量JAVA_HOME 略 二、设置Tomcat的环境变量 一次性全配置了 Tomcat的根目录,例如【E:\tomcat-6.0.35】 创建下列环境变量: CATALINA_HOME: E:\tomcat-6.0.35 CATALINA_BASE: E:\tomcat-6.0.35 TOMCAT_HOME: E:\tomcat-6.0.35 然后修改…

linux mysql 不稳定_linux,mysql:今天写出一个十分弱智的bug!
今天写出一个十分弱智的bug,记录一下,提醒自己以后别这种犯错,不怕丢人哈~在写一个分页查询记录的sql时,要根据添加的时间逆序分页输出,之前的写法是酱紫:selectrecord.a, y.c from ( selecta,b from xorde…

IOS XML解析
<?xml version "1.0" encoding "utf-8"?> <video>小黄人</video> <video></video> <video/> <videos> <video> </video> </videos> 不能相互嵌套。 xml中的所有空格和空行都会当成字符来…

BAT架构师分享之:大型网站技术架构
早期的网站为了节省成本一般会设计成集中式系统,应用程序、数据库等都部署在一台服务器上。 但随着业务的快速度发展,逐渐出现瓶颈,按一定原则**(应用拆分、服务拆分、数据拆分、应用解耦)**,向分布式系统转…

mysql isreg_`Innodb` MySQL中如何优雅的删除大表跑路
最近很想写写MySQL相关的内容,就从这个话题出发吧有人说删MySQL表谁不会不就是drop table TABLENAME如果在生产环境中,你对一张TB级别的大表,敲下这行命令那么你的主管,大主管,隔壁的大主管 就会气势汹汹的冲向你其原因…

常用正则表达式集锦
链接地址:http://blog.csdn.net/tjcyjd/article/details/48416405 验证数字:^[0-9]*$验证n位的数字:^\d{n}$验证至少n位数字:^\d{n,}$验证m-n位的数字:^\d{m,n}$验证零和非零开头的数字:^(0|[1-9][0-9]*)$验…

C(第一个C程序) 和 C++ (第一个C++程序)对比碰撞
个人博客首页(点击查看详情) -- https://blog.51cto.com/11495268 1、简介 C 是对 C 的继承、扩展,但从语言角度来说,这是 两种变成语言,就一定存在不同,本文 就借助于 C、C 的 最精简标准程序 进行对比…

java的byte与C#的异同引起的字符处理问题。
java的byte是有符号类型(java就没有无符号类型的数据),值域:-0128~127 c#的byte是无符号类型数值,值域:0~255 这在依赖字符编码处理程序中,两者源代码就不能通用了。 知道原因结局办法就容易多了。 1.使用&与运算 …

exec不同文件l怎么汇总_ABAQUS常见问题汇总 - 2.0版.doc
您所在位置:网站首页 > 海量文档 > 计算机 > C/C资料ABAQUS常见问题汇总 - 2.0版.doc154页本文档一共被下载:次,您可全文免费在线阅读后下载本文档。下载提示1.本站不保证该用户上传的文档完整性,…

1月12号 UIView
UIView 1.为什么要UIView .可以用UIView作为容器,存放子视图 .管理事件UIEvent 2.ios坐标系 以左上角为坐标原点,向右边是x的正方向,向下是y的正向方 bounds: 相对于视图本身而言(0,0,w, h) fra…

小虎计算器-技术支持
2019独角兽企业重金招聘Python工程师标准>>> 最简单的计算器,包含历史记录 转载于:https://my.oschina.net/u/1405818/blog/3050764

jquery即时搜索查询插件jquery.search.js
jquery.search.js搜索插件是一款基于jquery的插件,任何一个input输入款均可即时转为查询框,可分为前台数据直接显示和后台传输数据显示两种方案! 文档说明:http://www.sameus.com 代码下载地址: http://code.google.com/p/17sameus/downloads/list 使用方式 jquery.search.js插…

node mysql 批量写入_请问如何使用node.js在MySQL中进行批量插入
catspeake我四处寻找关于批量插入对象的答案。Ragnar123的回答使我得出了这样的结论:function bulkInsert(connection, table, objectArray, callback) {let keys Object.keys(objectArray[0]);let values objectArray.map( obj > keys.map( key > obj[key]…

win10 UWP 应用设置
win10 UWP 应用设置 简单的把设置需要的,放到微软自带的LocalSettings LocalSettings.Values可以存放几乎所有数据 如果需要存放复合数据,一个设置项是由多个值组成,可以使用ApplicationDataCompositeValue将多个合并。 存放一个string strin…

通过loganalyzer展示数据库中的日志
目的:通过loganalyzer展示数据库中的日志 准备环境: CentOS7_1:用来生成日志 CentOS7_2:用来存放日志的数据库 CentOS7_3:LAP服务器 第一步:在CentOS7_2安装mysql数据库 此处使用二进制安装mariadb…

libmemcached 1.0.11 发布
libmemcached 1.0.11 删除了 memcached 的定制版本,更新了硬化(hardening)规则,修复了 socket 连接返回错误的问题。 libmemcached是C客户端到memcached服 务器的接口库。具有低内存占用率、线程安全、并提供对memcached功能的全面支持。它还采用多种命令…