select … from … where … group by … having … order by … limit的执行顺序

 

select … from … where … group by … having … order by … limit的执行顺序

在大佬那里找到的:https://www.cnblogs.com/gxgd/p/9431783.html

select … from … where … group by … having … order by … limit的执行顺序

其实总结hive的执行顺序也是总结mapreduce的执行顺序:

MR程序的执行顺序:

map阶段:

1.执行from加载,进行表的查找与加载

2.执行where过滤,进行条件过滤与筛选(map时的数据筛选)

3.执行select查询:进行输出项的筛选

4.执行group by分组:描述了分组后需要计算的函数 (partition阶段)

5.map端文件合并:map端本地溢出写文件的合并操作,每个map最终形成一个临时文件。 然后按列映射到对应的reduceReduce阶段:

Reduce阶段:

1.group by:对map端发送过来的数据进行分组并进行计算。

这里应该加一个order by逻辑(排序应该是发生在reduce端的磁盘到磁盘的merge阶段--数据合并+排序)

这里应该加一个having逻辑,reduce阶段也可以进行逻辑筛选

2.select:最后过滤列用于输出结果

3.limit排序后进行结果输出到HDFS文件

所以通过上面的例子我们可以看到,在进行selectt之后我们会形成一张表,在这张表当中做分组排序这些操作。

 

 

MySQL中 ORDER BY 与 LIMIT 的执行顺序

如下:

ORDER BY 与 LIMIT 的执行顺序:ORDER BY > LIMIT
ORDER BY 与 LIMIT 的编写顺序:ORDER BY > LIMIT

 

正确写法:

select * from myTest ORDER BY id DESC LIMIT 6;

 

附上MySql的sql语句执行顺序

    1. FROM table1 left join table2 on 将table1和table2中的数据产生笛卡尔积,生成Temp1
    2. JOIN table2 所以先是确定表,再确定关联条件
    3. ON table1.column = table2.columu 确定表的绑定条件 由Temp1产生中间表Temp2
    4. WHERE 对中间表Temp2产生的结果进行过滤 产生中间表Temp3
    5. GROUP BY 对中间表Temp3进行分组,产生中间表Temp4
    6. HAVING 对分组后的记录进行聚合 产生中间表Temp5
    7. SELECT 对中间表Temp5进行列筛选,产生中间表 Temp6
    8. DISTINCT 对中间表 Temp6进行去重,产生中间表 Temp7
    9. ORDER BY 对Temp7中的数据进行排序,产生中间表Temp8
    10. LIMIT 对中间表Temp8进行分页,产生中间表Temp9
posted @ 2021-11-04 09:26  da0h1  阅读(251)  评论(0编辑  收藏  举报