使用 spark 版本 2 的 HIVE 中哪个更有效,max 或 order by desc limit 1

Which is more efficient, max or order by desc limit 1 in HIVE using spark version 2

由于 Hive 以分布式方式保存数据,当我们没有考虑分区或分桶中的列时,以下两个查询中哪个查询更有效。

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

肯定是 select max(stat_id) from stats_tbl 因为 order by 需要将所有数据收集(读取 "lots of shuffle")到一个 reducer 中(这就是为什么你必须提供一个 limit 子句it) 与可以分布式.

计算的聚合函数相比效率低下

查询执行的顺序是 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;

更有效