由于Hive将数据保持在分布式状态,因此当我们没有考虑按分区或按存储分区在分区中使用该列时,以下两种查询中的查询效率更高。
select max(stat_id) from stats_tbl ;
select stat_id from stats_tbl order by stat_id desc limit 1;
答案 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;
更有效率