优化含UNION ALL的Hive查询:移除重复子查询实现分组取TOP3
查询优化:用IN替代UNION ALL实现相同统计结果
直接通过IN子句过滤目标agent_ip,一次性完成分组统计与排序取数,完全等价于原UNION ALL写法且更高效简洁:
SELECT source_ip, SUM(cnt) AS t_count FROM tbl WHERE agent_ip IN ('111.111.111.111', '222.222.222.222') GROUP BY source_ip ORDER BY t_count DESC LIMIT 3;
关键说明
- 原写法对同一张表做两次独立扫描后合并结果,优化后仅需一次表扫描,通过
IN同时匹配两个目标IP,减少了重复计算开销。 - 统计逻辑完全一致:均计算每个source_ip在指定两个agent_ip下的cnt总和,最终按
t_count降序取TOP3。 - 若
agent_ip字段建有索引,IN子句可直接利用索引过滤数据,进一步提升查询性能。
内容的提问来源于stack exchange,提问作者devgate
相关产品推荐
相关产品推荐

