mysql查询解析过程_MySQL查询执行过程详解

news/2024/7/4 10:52:51

查询是用户通过设置某些查询条件,从表或其他查询中选取全部或者部分数据,以表的形式显示数据供用户浏览。查询是一个独立的、功能强大的、具有计算功能和条件检索功能的数据库对象。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教程中找到许多面试题,在学习的同时还能随时检验自己的能力,何乐而不为!


http://lihuaxi.xjx100.cn/news/239478.html

相关文章

Java云托管服务的开支削减策略

\摘要\随着项目不断扩大,你需要将其迁移到更大的虚拟机上。但如果新虚拟机环境超出了你的需求则会产生额外开支。\相比虚拟机,容器具有更小的粒度,并且无需重启运行中的实例即可垂直扩展。\单体应用和历史遗留应用无需更改配置,即…

flask url构建_如何为生产构建构建Flask-RESTPlus Web服务

flask url构建by Greg Obinna由格雷格奥比纳(Greg Obinna) 如何为生产构建构建Flask-RESTPlus Web服务 (How to structure a Flask-RESTPlus web service for production builds) In this guide I’ll show you a step by step approach for structuring a Flask RESTPlus web…

第一个spring boot应用

前提 首先要确保已经安装了java和maven: $ java -version java version "1.8.0_102" Java(TM) SE Runtime Environment (build 1.8.0_102-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode) $ mvn -v Apache Maven 3.3.9 (bb52d850…

刷新mysql的权限相关表_flush privileges刷新MySQL的系统权限相关表

mysql> flush privilegesmysql> update mysql.user set passwordPASSWORD(‘新密码’) where User’root’;mysql> flush privileges;mysql> quit答:mysql 新设置用户或更改密码后需用flush privileges刷新MySQL的系统权限相关表,否则会出现拒绝访问&am…

linux的挂载命令

在linux中所有的存储设备都必须挂载后才能使用,相当于windows的分配盘符 挂载命令 mount #查看系统中已经挂载好的设备 mount -a #根据/etc/fstab中的内容,自动挂载 /etc/fstab是系统开机的自动挂载文件 系统挂载时要自动检车测这个文件,如果…

mysql中日期判断的函数_MySql判断汉字、日期、数字的函数

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

ecmascript_TC39及其对ECMAScript的贡献

ecmascriptby Parth Shandilya通过Parth Shandilya TC39及其对ECMAScript的贡献 (TC39 and its contributions to ECMAScript) Many people get confused about what is JavaScript and what is ECMAScript. Sometimes it’s hard to tell how they are connected with each o…

vsCode

Q: 修改vscode的默认集成终端: "terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe" 转载于:https://www.cnblogs.com/maoriaty/p/8039296.html