一、MySQL架构总览:

二、查询执行流程

一条select的生存周期:

流程:

1.连接

1.1客户端发起一条Query请求,监听客户端的‘连接管理模块’接收请求;

1.2将请求转发到‘连接进/线程模块’;

1.3调用‘用户模块’来进行授权检查;

1.4通过检查后,‘连接进/线程模块’从‘线程连接池’中取出空闲的被缓存的连接线程和客户端请求对接,如果失败则创建一个新的连接请求;

2.处理

2.1先查询缓存,检查Query语句是否完全匹配,接着再检查是否具有权限,都成功则直接取数据返回;

2.2上一步有失败则转交给‘命令解析器’,经过词法分析,语法分析后生成解析树;

2.3接下来是预处理阶段,处理解析器无法解决的语义,检查权限等,生成新的解析树;

2.4再转交给对应的模块处理;

2.5如果是SELECT查询还会经由‘查询优化器’做大量的优化,生成执行计划;

2.6模块收到请求后,通过‘访问控制模块’检查所连接的用户是否有访问目标表和目标字段的权限;

2.7有则调用‘表管理模块’,先是查看table cache中是否存在,有则直接对应的表和获取锁,否则重新打开表文件;

2.8根据表的meta数据,获取表的存储引擎类型等信息,通过接口调用对应的存储引擎处理;

2.9上述过程中产生数据变化的时候,若打开日志功能,则会记录到相应二进制日志文件中;

3.结果

3.1Query请求完成后,将结果集返回给‘连接进/线程模块’;

3.2返回的也可以是相应的状态标识,如成功或失败等;

3.3‘连接进/线程模块’进行后续的清理工作,并继续等待请求或断开与客户端的连接;

查询缓存(query cache)

在解析一个查询语句之前,如果查询缓存是打开的,那么MySQL会优先检查这个查询是否命中查询缓存中的数据。这个检查是通过一个对大小写敏感的哈希查找实现的。查询和缓存中的查询即使只有一个字节不同,那也不会匹配缓存结果,这种情况查询会进入下一个阶段的处理。

如果当前的查询恰好命中了查询缓存,那么在返回查询结果之前MySQL会检查一次用户权限。这仍然是无须解析查询SQL语句的,因为在查询缓存中已经存放了当前查询需要访问的表信息。如果权限没有问题,MySQL会跳过所有其他阶段,直接从缓存中拿到结果并返回给客户端。这种情况下,查询不会被解析,不用生成执行计划,不会被执行。

语法解析器和预处理器

首先,MySQL通过关键字将SQL语句进行解析,并生成一棵对应的“解析树”。MySQL解析器将使用MySQL语法规则验证和解析查询。例如,它将验证是否使用错误的关键字,或者使用关键字的顺序是否正确等,再或者它还会验证引号是否能前后正确的匹配。

预处理器则根据一些MySQL规则进一步检查解析树是否合法,例如,这里讲检查数据表和数据列是否存在,还会解析名字和别名,看看它们是否有歧义。

下一步预处理器会验证权限,这通常很快,除非服务器上有非常多的权限设置。

三、SQL解析顺序

SQL语句:

SELECT DISTINCT FROM JOIN ON WHERE GROUP BY HAVING ORDER BY LIMIT

然而它的执行顺序是这样的:

FROM ON JOIN WHERE GROUP BY HAVING SELECT DISTINCT ORDER BY LIMIT

这里配上sql 解析图,很清晰:

JAVA执行过程sql,SQL 执行过程相关推荐

  1. Oracle sql语句执行过程图文分析

    这个可以算是学习笔记吧, 是参照甲骨论老相老师的视频做的: http://www.jiagulun.com/thread-2674-1-1.html 1.数据库文件 Oracle 数据库文件大概可分为 ...

  2. MyBatis 源码分析 - SQL 的执行过程

    本文速览 本篇文章较为详细的介绍了 MyBatis 执行 SQL 的过程.该过程本身比较复杂,牵涉到的技术点比较多.包括但不限于 Mapper 接口代理类的生成.接口方法的解析.SQL 语句的解析.运 ...

  3. mybatis delete返回值_面试:谈谈你对MyBatis执行过程之SQL执行过程理解

    前言 在了解了MyBatis初始化加载过程后,我们也应该研究看看SQL执行过程是怎样执行?这样我们对于Mybatis的整个执行流程都熟悉了,在开发遇到问题也可以很快定位到问题. 更重要的,在面试中遇到 ...

  4. 【转】2.1【MySQL】运行原理(一):查询sql的执行过程及MySQL架构分析

    MySQL的发展历史和版本分支: 时间 里程碑 1996 年 MySQL1.0 发布.它的历史可以追溯到 1979 年,作者 Monty 用 BASIC 设计的一个报表工具. 1996 年 10 月 ...

  5. 一个sql的执行过程详解

    作者:猿来是八阿哥 链接:https://www.jianshu.com/p/e2926d6a808f 一个sql的执行过程 一. 组成部分 PDO_MYSQL is a driver that im ...

  6. 面试官:听说你sql写的挺溜的,你说一说查询sql的执行过程

    来自:非科班的科班 当希望Mysql能够高效的执行的时候,最好的办法就是清楚的了解Mysql是如何执行查询的,只有更加全面的了解SQL执行的每一个过程,才能更好的进行SQl的优化. 当执行一条查询的S ...

  7. oracle一条sql的执行过程,请问执行一条sql的整个过程是怎样的,谢谢!

    select count(*) into c from yaoyao_pbj where object_id=7559; select count(*) into c from yaoyao_pbj ...

  8. mysql 拼接sql批量执行_Mysql 学习笔记之 SQL 执行过程

    写在开始 本系列源自极客时间 MySQL 专栏,整理而成 在执行下面这个查询语句时的执行的流程是怎么样的? mysql 看过相关资料的同学都可能知道执行流程大概是这样的: 其执行过程为:连接.查询缓存 ...

  9. 【原创】大数据基础之Hive(2)Hive SQL执行过程之SQL解析过程

    Hive SQL解析过程 SQL->AST(Abstract Syntax Tree)->Task(MapRedTask,FetchTask)->QueryPlan(Task集合)- ...

  10. Oracle SQL语句执行过程

    前言 QQ群讨论的时候有人遇到这样的问题:where子句中无法访问Oracle自定义的字段别名.这篇 博客就是就这一问题做一个探讨,并发散下思维,谈谈SQL语句的执行顺序问题. 问题呈现 直接给出SQ ...

最新文章

  1. 不敢相信,居然用Java写了个“天天酷跑”!
  2. 基于Yolo-V3对卫星图像进行储油罐容积占用率的研究
  3. winxp ie8.0 html5,(IE8)Internet Explorer 8.0 For WinXP 简体中文正式版
  4. ajax datatype为html,Jquery ajax请求中datatype的含义
  5. SAP Fiori Launchpad Tile,UI5应用,和PFCG Role的对应关系
  6. 微信禁用右上角的分享按钮,WeixinJSBridge API以及隐藏分享的子按钮等菜单项
  7. linux c实现线程超时退出,c – 如何在另一个线程的超时内唤醒select()
  8. canvas的getImageData和putImageDataAPI
  9. 用matlab画出TFT,基于Matlab的TFT-LCD解码电路的仿真设计(含程序)
  10. STS热部署,springboot项目中修改代码不用重新启动服务
  11. 华为手机文件在内部存储路径_华为手机查找文件路径 华为文件夹在哪里
  12. 如何将 Mac 显示器投放到 Apple TV 或非 Apple 智能电视?
  13. Django项目实战——10—(修改地址前后端逻辑、删除地址前后端逻辑、设置默认地址、修改密码、虚拟机安装docker/FastDFS、电商-商品知识、首页广告数据库表分析、商品信息数据库表分析)
  14. burp 安装 license key not recognized
  15. MYSQL查询优化一
  16. 02前端学习之CSS3(1)
  17. 工作中常见的开会问题
  18. 消息队列和ZeroMQ原理和应用
  19. 2020.03.18模拟赛17(第三题)
  20. for else语法

热门文章

  1. 思科路由器的硬件组成
  2. 今天去团省委维护网站
  3. CMOS图像传感器——TDI CIS
  4. ABB机器人之LOADDATA
  5. 【HTML学习】——HTML常见标签属性和方法介绍
  6. 【图像处理】——Python OpenCV实现形态学膨胀、腐蚀开闭操作(可以用于图像滤波、图像分割等)
  7. php的两种复合数据类型是什么意思_2.4PHP复合数据类型:数组和对象
  8. pythonflaskmock数据_Flask实现简单Mock Server
  9. 1 vmware 如何联网,以及行命令令初步
  10. 洛谷P1073 Tarjan + 拓扑排序 // 构造分层图