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

概述

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


01

架构总览

下面看一下mysql的架构图:

2ca8992a716c31d539fc485ea838ffc8.png

mysql架构

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

再看一下Oracle的架构:

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

8ccbd6c6fcaa98604b872d188931485a.png

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

最后一图做小总结:

5df5e8fa3be429366a824359fa481695.png

mysql查询执行流程

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

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

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

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

7fb70dbb34214dbc0cccaf13fda22f27.png

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 

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

总结一下:

bc9998c7285df0db25fd79a361673c90.png

sql解析顺序


总结

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

b6bd78dc5ef3ce9f13f37ca7e220c865.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值