-
2021-07-01 14:15:16
1.执行顺序
在 hive 和 mysql 中都可以通过 explain+sql 语句,来查看执行顺序。对于一条标准 sql 语句,它的书写顺序是这样的:
select … from … where … group by … having … order by … limit …
(1)mysql 语句执行顺序:
from... where...group by... having.... select ... order by... limit …
(2)hive 语句执行顺序:
from … where … select … group by … having … order by … limit …
2.Hive执行顺序
hive 基于 MapReduce 程序,它的执行顺序决定了 hive 语句的执行顺序,Map 阶段:
- 执行 from 加载,进行表的查找与加载
- 执行 where 过滤,进行条件过滤与筛选
- 执行 select 查询:进行输出项的筛选
- 执行 group by 分组:描述了分组后需要计算的函数
map 端文件合并:map 端本地溢出写文件的合并操作,每个 map 最终形成一个临时文件。
然后按列映射到对应的 reduceReduce 阶段:- group by:对map端发送过来的数据进行分组并进行计算。
- select:最后过滤列用于输出结果
- limit:排序后进行结果输出到HDFS文件
优化重点
根据执行顺序,我们平时编写时需要记住以下几点:
- 使用分区剪裁、列剪裁,分区一定要加
- 少用 COUNT DISTINCT,group by 代替 distinct
- 是否存在多对多的关联
- 连接表时使用相同的关键词,这样只会产生一个 job
- 减少每个阶段的数据量,只选出需要的,在 join 表前就进行过滤
- 大表放后面
- 谓词下推:where 谓词逻辑都尽可能提前执行,减少下游处理的数据量
- sort by 代替 order by
更多相关内容 -
SQL执行顺序
2016-08-16 15:56:09SQL执行顺序介绍 -
Oracle sql 执行顺序及原理详解
2021-09-18 08:54:431 概述2 执行原理3 执行顺序3.1 语法顺序3.2 整体:从内到外,从下到上,从右到左 1 概述 2 执行原理 1. 第一步:'客户端' 把语句发给 '服务器端' 执行('用户进程' -> '服务器进程') (1) Oracle '...1 概述
2 执行原理
1. 第一步:'客户端' 把语句发给 '服务器端' 执行('用户进程' -> '服务器进程') (1) Oracle '客户端'(如:pl/sql Developer, sql*plus) 是不会做任何操作的, 它的主要任务就是把 '客户端' 产生的 sql 语句发送给 '服务器端' (2) Oracle '服务器端' 才会对 sql 语句进行处理 (3) '客户端' 的进程跟 '服务器端' 的进程是 "一一对应" 的 2. 第二步:语句解析 (1) 查询 '库缓存(librart cache)',是否存在 '相同语句的执行计划', 如果存在,服务器进程会 "直接执行(直接到第三步)" 这个 sql 语句('软解析'),省略后续步骤,提高查询效率 如果不存在,服务器进程会从硬盘中读取 '数据文件'('硬解析'),继续后续步骤 (2) '语法检查':是否合乎语法规则 (3) '语义检查':字段、表等内容是否在数据库中 (4) 获得 '对象解析锁':当 语法、语义都正确后,系统会对我们需要查询的对象加锁。 这主要是为了保证数据的一致性('事务特性之一'),防止我们在查询过程中,其他 用户对该对象的结构发生改变 (5) '权限检查':该用户是否拥有权限访问这些数据 (6) 确定 '最佳执行计划':Oracle 数据库对 SQL 语句自我优化 3. 第三步:语句执行 对于 select:首先 '服务器进程' 要判断所需数据是否在 '库缓存(librart cache)' 如果存在,则直接获取该数据而不是从 '数据库文件' 中去查询数据, 同时,根据 LRU(Least Recently Used 最近最少使用)算法增加其访问次数 如果不存在,则 '服务器进程' 将从 '数据库文件' 中查询相关数据, 并且,将这些数据放入到 '库缓存(librart cache)' 中 对于 update、insert、delete: (1) 检查 sql 是否已经读取到 '库缓存(librart cache)' 如果已存在,则直接执行步骤 3 (2) 如果不存在,则 '服务器进程' 将 '数据块' 从 '数据文件' 读取到 '库缓存' (3) 对想要修改的表取得数据的行锁定(Row Exclusive Lock) (4) 将数据的 Redo 记录复制到 '重做日志缓冲区 Redo Log Buffer' (5) 产生修改的 undo 数据 (6) 修改 '库缓存(librart cache)' (7) 后台进程 dbwr 将修改写入 '数据文件'
4. 第四步:提取数据
可用到的相关视图:
select * from v$session t; select * from v$sql t;
3 执行顺序
3.1 语法顺序
sql 查询大致语法结构如下:
(5) SELECT DISTINCT <..> (1) FROM <..> JOIN <..> ON <..> (2) WHERE <..> (3) GROUP BY <..> (4) HAVING <..> (6) ORDER BY <..>
sql 语法处理的顺序如下:
1. FROM -- 首位,sql入口 2. ON 3. JOIN 4. WHERE 5. GROUP BY 6. HAVING 7. SELECT 8. DISTINCT 9. ORDER BY
3.2 整体:从内到外,从下到上,从右到左
- 实际开发中,
sql
语句一般都挺复杂的,它们之前的执行顺序除了上述语法顺序外
,还有一个整体的顺序,如 标题,这点,可通过F5(执行计划)
进行查看。
验证:从内到外(子查询优先):
验证:从下到上,从右到左:
- 实际开发中,
-
【postgresql】SQL执行顺序
2022-01-06 09:39:56 -
数据库SQL执行顺序详解
2020-07-07 21:28:49SQL语句执行 首先摘抄一段经典的SQL语句. (1) SELECT (2)DISTINCT<select_list> (3) FROM <left_table> (4) <join type> JOIN <right_table> (5) ON <join_condition> (6) WHERE &...SQL语句执行顺序
为什么要了解SQL?
- Ans1: 动态网页靠的是什么, 是数据库中的数据啊. 只有精通数据库才有可能称为开发大佬.
- Ans2: SQL就是操作数据库的标准语句, 所以玩转SQL是重要的前提. 别说啦, 赶紧把下面的内容拿走.
SQL执行说明
-
首先摘抄一段特别经典的SQL语句.
(1) SELECT (2)DISTINCT<select_list> (3) FROM <left_table> (4) <join type> JOIN <right_table> (5) ON <join_condition> (6) WHERE <where_condition> (7) GROUP BY <group_by_list> (8) WITH {CUBE|ROLLUP} (9) HAVING <having_condition> (10) ORDER BY <order_by_condition> (11) LIMIT <limit_number>
-
执行顺序分析,排序靠前的最先执行 :
- FROM : 首先左边的表<left_table>和右边的表<right_table>先进行笛卡尔运算 .举个栗子:<left_table>中有m条记录,<right_table>中有n条记录,那么会产生一个m*n个的虚拟表VT1(virtual table);
- ON : 符合连接条件<join_condition>的记录会被保留下来,我们暂且称之为VT2;
- JOIN : 如果指定了连接类型(左连接,右连接),那么保留表中未匹配的记录作为外部行添加到虚拟表VT2,形成VT3;
- WHERE : 对虚拟表VT3进行条件过滤,记录满足条件<where_condition>才会执行下一步,此时的虚拟表称它为VT4;
- GROUP BY : 对VT4按照GROUP BY的列进行分组,形成VT5;
- WITH : 对VT5进行CUBE或ROLLUP操作,产生表VT6;
- HAVING : 对虚拟表VT6应用HAVING过滤器,只有符合<having_condition>的记录才会被插入到VT7;
- SELECT : 执行SELECT操作,选择指定的列,形成VT8;
- DISTINCT: 去除重复,产生虚拟表VT9;
- ORDER BY: 将虚拟表VT9中的记录按照排序字段<order_by_list>进行排序操作,产生虚拟表VT10;
- LIMIT: 取出指定行的记录,产生虚拟表VT11,并返回给查询用户.
-
补充 :
- 如果查询表的数量超过两个,那么可以把得到的VT3表当成已知表和下一个表重复步骤1-3,最后形成一个新的NVT3,接着进行操作;
- WITH : 中{CUBE|ROLLUP} : 通常和group by 语句一起使用,是根据维度在分组的结果集中进行聚合操作。——对group by的分组进行汇总。其和Order By互斥.
-
java程序基础——SQL执行顺序
2022-03-27 21:15:25SQL执行顺序 1.from 2.join 3.on 4.where 5. group by(开始使用select中的别名,后面的语句中都可 以使用) 6.avg,sum.... 7.having 8.select 9.distinct 10.order by 11.limit 查询语句都是从from开始执行的,... -
Spark SQL执行流程解析之 sql执行顺序
2019-08-11 22:57:32Spark Sql 关键字执行顺序跟Sql执行顺序类似: 1.先将from前两表做笛卡尔积加载进来形成虚拟表vt1, 2.on条件后为真的插入虚拟表形成vt2, 如果包含多个表,重复操作, 完成所有数据加载后, 开始对形成的大虚拟表vt2... -
sql 执行顺序-子查询
2021-05-13 16:54:57如何正确理解SQL关联子查询 一、基本逻辑 对于外部查询返回的每一行数据,内部查询都要执行一次。在关联子查询中是信息流是双向的。外部查询的每行数据传递一个值给子查询,然后子查询为每一行数据执行一次并返回... -
hive中sql执行顺序
2019-09-23 00:07:481.from 2.joinon 或 lateral view explode(需炸裂的列) tbl as 炸裂后的列名 3.where 4.group by (开始使用select中的别名,从group 开始往后都可用) ...7.select 中若包含over()开窗函数,执行完非开... -
SQL语句执行顺序图文介绍
2020-09-11 00:15:16本文将详细介绍数据库总结--SQL语句执行顺序,需要了解更多的朋友可以参考下 -
SQL执行顺序与JOIN图
2019-05-09 20:57:10(1)、SQL执行顺序 手写 机读 随着Mysql版本的更新换代,其优化器也在不断的升级,优化器会分析不同执行顺序产生的性能消耗不同而动态调整执行顺序。 下面是经常出现的查询顺序: 总结 (2)、JOIN图 ... -
sql执行顺序及去重的三种方式
2020-09-10 20:49:56------sql执行顺序 基本语法 (1)from (2) on (3) join (4) where (5)group by(开始使用select中的别名,后面的语句中都可以使用) (6) avg,sum… (7)having (8) select (9) distinct (10) order by ##注: sql查询的... -
GROUP BY分组查询与SQL执行顺序
2020-07-29 21:09:44在SQL中使用GROUP BY来对SELECT的结果进行数据分组,在具体使用GROUP BY之前需要知道一些重要的规定。 GROUP BY子句可以包含任意数目的列。也就是说可以在组里再分组,为数据分组提供更细致的控制。 如果在GROUP ... -
sql和MySQL的语句执行顺序分析
2020-12-16 01:37:05今天遇到一个问题就是mysql中...一、sql执行顺序 (1)from (2) on (3) join (4) where (5)group by(开始使用select中的别名,后面的语句中都可以使用) (6) avg,sum…. (7)having (8) select (9) distinct -
MySQL -> DQL:SQL执行顺序,优先级
2020-11-04 17:53:48sql执行顺序: 先执行'from'关键字后面的语句,明确数据的来源,它是从哪张表取来的。 接着执行'where'关键字后面的语句,对数据进行筛选。 再接着执行'group by'后面的语句,对数据进行分组分类。 然后执行'... -
sql执行顺序
2016-07-25 15:21:11sql执行顺序 SQL 不同于与其他编程语言的最明显特征是处理代码的顺序。在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后... -
SQL的执行顺序
2022-01-17 10:36:52SQL的执行顺序 -
sql笔记1:sql执行优先级和casewhen用法、sql执行顺序
2021-01-14 18:42:26MySQL 语句中执行优先级——and比or高 例: select * from table where 条件1 AND 条件2 OR 条件3 等价于 select * from table where ( 条件1 AND 条件2 ) OR 条件3 select * from table where 条件1 AND...sql执行顺序 -
SQL 查询执行顺序
2021-12-20 16:33:00执行顺序: from > where(分组前的过滤) > group by > having(分组后的过滤) > order by > select(返回最后符合条件的数据); 1.where 子句优先执行于聚合语句(sum,min,max,avg,count)。 2.聚合... -
sql语句的顺序是怎么执行的
2020-01-17 14:59:36Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序 -
sql 编写顺序及执行顺序
2021-03-03 16:14:00一、sql编写顺序 1、SELECT DISTINCT <select list> 2、FROM <left_table><join_type> 3、JOIN <right_table> ON <join_condition> 4、WHERE <where_condition> 5、........ -
分组查询GROUP BY的使用与SQL执行顺序的讲解
2021-01-19 08:31:33在SQL中使用GROUP BY来对SELECT的结果进行数据分组,在具体使用GROUP BY之前需要知道一些重要的规定。1、GROUP BY子句可以包含任意数目的列。也就是说可以在组里再分组,为数据分组提供更细致的控制。2、如果在GROUP... -
sql 查询语句执行顺序
2021-05-29 20:50:09了解 sql 的执行顺序是很必要的,执行顺序不同可能查询到的结果最后也会不一样。 select 语句的完整语法如下: SELECT DISTINCT < select_field > FROM < ... -
关于SQL语句的执行顺序
2022-04-22 00:11:02关于SQL语句的执行顺序,from where group by having select order by limit -
详细hive sql 执行顺序
2020-11-16 16:50:16执行顺序从1到9 1.from 2.join on 或 lateral view explode 3.where 4.group by (group 以后可以使用别名) 5.聚合函数 如sum() avg() count() 6.having (group 可以在group之后再进行过滤) 7.select 中若包含over... -
Hive框架(三) —— Hive SQL语句的执行顺序
2022-05-02 11:11:23HQL的语句执行顺寻与SQL有一定的差别 Hive SQL From - where - join - on - select - group by - select - having - distinct - order by - limit - union/union all Map 阶段: 执行 from,进行表的查找与...