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

mysql查询解析过程_MySQL查询执行过程详解相关推荐

  1. mysql和oracle执行计划_mysql explain执行计划详解

    原文链接:https://www.cnblogs.com/xiaoboluo768/p/5400990.html mysql> explain  select t1.kprq from    p ...

  2. mysql 执行计划详解_mysql explain执行计划详解

    备注:转载 1).id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询. 2).select_type列常见的有: A:si ...

  3. mysql 执行计划 代价_mysql explain执行计划详解

    1).id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询. 2).select_type列常见的有: A:simple:表 ...

  4. mysql心得体会一百字_MYSQL CPU 100%实例详解

    MYSQL CPU 100%实例详解 2011/7/2 11:19:19作者:xy我要评论(0) 自己的一台主机(Windows 2003 + IIS + PHP + MYSQL )近来 MySQL ...

  5. mysql show full processlist;_mysql show full processlist 详解

    Checking table 正在检查数据表(这是自动的). Closing tables 正在将表中修改的数据刷新到磁盘中,同时正在关闭已经用完的表.这是一个很快的操作,如果不是这样的话,就应该确认 ...

  6. mysql外键教程_MySQL外键使用详解

    最近有开始做一个实验室管理系统,因为分了几个表进行存储·所以要维护表间的关联··研究了一下MySQL的外键 . (1)只有InnoDB类型的表才可以使用外键,mysql默认是MyISAM,这种类型不支 ...

  7. mysql使用教程图文_MySQL使用教程图文详解

    如果你会查询这些相关的问题,说明你是一个正在或者准备从事IT的程序猿,对于一个程序猿而言,不会使用Linux系统的程序猿不是一好的程序猿哦!因为Windows有时候真的让人很抓狂,而本人也相信没有什么 ...

  8. mysql数据库导入导出_MySQL数据库导入导出详解

    MySQL数据库的导入,有两种方法:1) 先导出数据库SQL脚本,再导入:2) 直接拷贝数据库目录和文件.在不同操作系统或MySQL版本情况 1. 概述 MySQL数据库的导入,有两种方法: 1) 先 ...

  9. mysql如何使用事件_MySQL事件的使用详解

    在系统管理或者数据库管理中,经常要周期性的执行某一个命令或者SQL语句.这个时候就会用到mysql事件,使用这个功能必须保证是mysql的版本是5.1以上. 1.首先要查看事件是否开启了,SHOW V ...

  10. mysql中数字格式化_mysql中格式化数字详解

    最近因为工作的需求,需要对mysql中数字进行格式化,但发现网上的资料较少,索性自己总结一下,方便自己也帮助有需要的朋友们,下面话不多说,来一起看看详细的介绍: 一.format函数: 格式化浮点数 ...

最新文章

  1. 电子产品如何使用IAP方式升级程序
  2. 人脸识别(通过照片库区别人物)
  3. 33. Search in Rotated Sorted Array
  4. 收藏属于自己flash类库集工具
  5. java设计模式迭代器模式_Java中的迭代器设计模式–示例教程
  6. 不要再问我跨域的问题了
  7. 8-字符串的压缩存储
  8. Android开发环境搭建ADT-Bundle集成IDE及Hello World
  9. 点云投影_激光点云变换到图像平面并保存成int16灰度图一帧激光点云+一张RGB图像得到彩色点云
  10. 【Webcam设计】总结与代码仓库
  11. iptv 缓存 linux,一种IPTV直播业务的卡顿检测方法及系统与流程
  12. 微信小程序 实现跑马灯(文字+图片)
  13. php 高并发解决方案(用于抢购)
  14. ReResNet源码解读
  15. 01. Perl 简介
  16. 应用程序错误(0xc0000135)
  17. Web全栈架构师(三)——NodeJS+持久化学习笔记(2)
  18. Machine Learning – 第2周(Linear Regression with Multiple Variables、Octave/Matlab Tutorial)
  19. 宇宙最强vscode教程
  20. 3月16日---3月20日课程表

热门文章

  1. VUE 动态绑定class
  2. UIBezierPath和CAShapeLayer创建不规则View(Swift 3.0)
  3. AndroidStudio脚本命令指定AAR生成目录与版本号
  4. ABP理论学习之数据传输对象(DTO)
  5. iframe 自动适应高和宽问题 和 其他Frame操作技巧
  6. 3-openstack之keystone上
  7. 为什么多 TCP 连接比单 TCP 连接传输快
  8. linux下jdk简单配置记录
  9. stm32时钟树讲解
  10. leetcode -- 3 sum