概述

之前分享的主要是Oracle上的一些内容,那么mysql又有哪些地方不一样呢?下面从MySQL总体架构、sql查询执行流程和语句执行顺序来看一下。。

01

架构总览

下面看一下mysql的架构图:

mysql架构

从上图中我们可以看到,整个架构分为两层,上层是MySQLD的被称为的‘SQL Layer’,下层是各种各样对上提供接口的存储引擎,被称为‘Storage Engine Layer’。其它各个模块和组件,从名字上就可以简单了解到它们的作用,这里就不多做介绍了。

再看一下Oracle的架构:

Oracle系统体系结构由三部分组成:逻辑结构、物理结构和实例。

02

查询执行流程

理解sql查询执行的流程对优化是很重要的,下面介绍下mysql的查询执行流程:

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‘连接进/线程模块’进行后续的清理工作,并继续等待请求或断开与客户端的连接

最后一图做小总结:

mysql查询执行流程

在看一下Oracle的sql查询执行流程:

1、当一用户第一次提交一个SQL表达式时,Oracle会将这SQL进行Hard parse,这过程有点像程序编译,检查语法、表名、字段名等相关信息(如下图),这过程会花比较长的时间,因为它要分析语句的语法与语义。然后获得最优化后的执行计划(sql plan),并在内存中分配一定的空间保存该语句与对应的执行计划等信息。

2、当用户第二次请求或多次请求时,Oracle会自动找到先前的语句与执行计划,而不会进行Hard parse,而是直接进行Soft parse(把语句对应的执行计划调出,然后执行),从而减少数据库的分析时间。

注意的是:Oracle中只能完全相同的语句,包大小写、空格、换行都要求一样时,才会重复使用以前的分析结果与执行计划。

03

SQL解析顺序

这一块Oracle和mysql都是一样的,所以就不区别开了。看一个实例:SELECT DISTINCT

< select_list >

FROM

< left_table > < join_type >

JOIN < right_table > ON < join_condition >

WHERE

< where_condition >

GROUP BY

< group_by_list >

HAVING

< having_condition >

ORDER BY

< order_by_condition >

LIMIT < limit_number >

执行顺序是这样的1 FROM

2 ON

3 JOIN

4 WHERE

5 GROUP BY

6 HAVING

7 SELECT

8 DISTINCT

9 ORDER BY

10 LIMIT

一看还是很自然和谐的,从哪里获取,不断的过滤条件,要选择一样或不一样的,排好序,那才知道要取前几条呢。

总结一下:

sql解析顺序

总结

后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

oracle和mysql文件怎么打开_Oracle vs Mysql--架构、sql查询执行流程及SQL解析顺序区别说明-sql文件怎么打开...相关推荐

  1. bs架构与cs架构的区别_Oracle vs Mysql--架构、sql查询执行流程及SQL解析顺序区别说明...

    概述 之前分享的主要是Oracle上的一些内容,那么mysql又有哪些地方不一样呢?下面从MySQL总体架构.sql查询执行流程和语句执行顺序来看一下.. 01 架构总览 下面看一下mysql的架构图 ...

  2. mysql数据库总览_MySQL架构总览-查询执行流程-SQL解析顺序

    从上图中我们可以看到,整个架构分为两层,上层是MySQLD的被称为的'SQL Layer',下层是各种各样对上提供接口的存储引擎,被称为'Storage Engine Layer'.其它各个模块和组件 ...

  3. 步步深入MySQL:架构-gt;查询执行流程-gt;SQL解析顺序!

    一.前言 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来探讨一下其中的知识. 二.MySQL架构总览 架构最好看图,再配上必要的说明文字. 下图根据参考书籍中一图为原 ...

  4. MySQL 架构总览-查询执行流程-SQL 解析顺序

    点击关注公众号,回复"1024"获取2TB学习资源! 前言 一直是想知道一条 SQL 语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文 ...

  5. 步步深入:MySQL架构总览-gt;查询执行流程-gt;SQL解析顺序

    转载自 https://www.cnblogs.com/annsshadow/p/5037667.html 前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料 ...

  6. 步步深入MySQL:架构-查询执行流程-SQL解析顺序

    一.前言 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序 ...

  7. 详解MySQL的逻辑架构和SQL语句执行流程

    文章目录 1. 逻辑架构 1.1 连接层 1.2 服务层 1.3 引擎层 1.3.1 InnoDB 存储引擎 1.3.2 MyISAM 存储引擎 1.3.3 其他存储引擎 1.4 存储层 3. SQL ...

  8. mysql 查询执行过程_深入浅出Mysql(一)——sql查询执行过程

    一.sql查询执行过程概括 下面给出的mysql基本架构示意图,从中你可以清楚的mysql的各个模块和执行过程. 大体来说可以分为两部分Server层和储存引擎层.Server层包括连接器.查询缓存. ...

  9. Oracle SQL语句执行流程与顺序原理详解

    以前读的文章,保存到本地了,忘记来源了,分享一下,本地存着怕丢了 Oracle SQL语句执行流程与顺序原理详解 第一步:客户端把语句发给服务器端执行 当我们在客户端执行SQL语句时,客户端会把这条S ...

最新文章

  1. 【BZOJ4282】慎二的随机数列 乱搞
  2. python graph_python graph什么意思
  3. typescript安装、数据类型及tsconfig配置项说明
  4. 从GitHub中整理出来的15个最受欢迎的Python开源框架,你喜欢哪个
  5. javascript随堂练习(分支,循环语句)
  6. 数据仓库基础(二)ETL
  7. 头发剪短了要快速生发_怎样生发效果最好最快?四个方法快速长出头发!
  8. mac下eclipse启动时间插件开发
  9. 从pandas到geopandas
  10. 转:linux中select()函数分析
  11. git分支创建分支删除分支合并
  12. 常见问题解决方法汇总——十四届恩智浦智能车室外电磁越野组
  13. 神经网络检索方法与一种结合local和distributed文本相似度算法
  14. 【R_绘图】绘图字体设为Times New Roman
  15. RecyclerView条目复用导致混乱的解决方案之一
  16. 2017年PHP程序员未来路在何方——韩天峰
  17. 史诗手册!微信小程序新手自学入门宝典!你想要的都在这里
  18. 蓝牙耳机通话降噪哪个效果好?目前降噪效果最好的耳机推荐
  19. android 耗时分析,启动耗时分析(四)-具体方法耗时分析
  20. 【Android】ListView、RecyclerView、ScrollView里嵌套ListView 相对优雅的解决方案:NestFullListView

热门文章

  1. 妙味课堂——HTML+CSS(第一课)
  2. C# access update 出错总结,注意事项
  3. 获取网站Alexa排名数值的方法
  4. AI服务器的优势有哪些?人工智能服务器产品有哪些?
  5. IplImage和Mat间的相互转换
  6. 发现一个电子书下载的【简书】
  7. Java设计模式---桥接Bridge模式
  8. 关于打印机共享的注意事项——又被叫去修电脑了
  9. 【C++】源自指针的报错
  10. MySQL—更改索引