下面看一下mysql的架构图:
mysql架构
从上图中我们可以看到,整个架构分为两层,上层是MySQLD的被称为的‘SQL Layer’,下层是各种各样对上提供接口的存储引擎,被称为‘Storage Engine Layer’。其它各个模块和组件,从名字上就可以简单了解到它们的作用,这里就不多做介绍了。
再看一下Oracle的架构:
Oracle系统体系结构由三部分组成:逻辑结构、物理结构和实例。
理解sql查询执行的流程对优化是很重要的,下面介绍下mysql的查询执行流程:
1.连接
2.处理
3.结果
最后一图做小总结:
mysql查询执行流程
在看一下Oracle的sql查询执行流程:
1、当一用户第一次提交一个SQL表达式时,Oracle会将这SQL进行Hard parse,这过程有点像程序编译,检查语法、表名、字段名等相关信息(如下图),这过程会花比较长的时间,因为它要分析语句的语法与语义。然后获得最优化后的执行计划(sql plan),并在内存中分配一定的空间保存该语句与对应的执行计划等信息。
2、当用户第二次请求或多次请求时,Oracle会自动找到先前的语句与执行计划,而不会进行Hard parse,而是直接进行Soft parse(把语句对应的执行计划调出,然后执行),从而减少数据库的分析时间。
注意的是:Oracle中只能完全相同的语句,包大小写、空格、换行都要求一样时,才会重复使用以前的分析结果与执行计划。
这一块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 一看还是很自然和谐的,从哪里获取,不断的过滤条件,要选择一样或不一样的,排好序,那才知道要取前几条呢。
总结一下:
| 留言与评论(共有 0 条评论) “” |