使用Spark版本2在HIVE中按desc限制1更有效,最大或排序

时间:2018-06-25 13:56:41

标签: scala apache-spark hiveql sqlperformance

由于Hive将数据保持在分布式状态,因此当我们没有考虑按分区或按存储分区在分区中使用该列时,以下两种查询中的查询效率更高。

  1. select max(stat_id) from stats_tbl ;
  2. select stat_id from stats_tbl order by stat_id desc limit 1;

2 个答案:

答案 0 :(得分:1)

绝对是y,因为select max(stat_id) from stats_tbl需要将所有数据收集(读取为“随机播放”)到单个化简器中(这就是为什么必须为其提供order by子句的原因)与可以分布式计算的聚合函数相比,这种方法效率低下。

答案 1 :(得分:1)

查询执行的顺序类似于from-> where-> group by-> having-> select-> order by -> limit

因此select max(stat_id) from stats_tbl ;是一个简单的扫描操作,这意味着它只会逐行迭代一次,但是查询select stat_id from stats_tbl order by stat_id desc limit 1;将在扫描后执行排序,之后将应用limit

我们还知道,加索引是昂贵的操作,然后进行扫描,因此查询select max(stat_id) from stats_tbl;select stat_id from stats_tbl order by stat_id desc limit 1;更有效率