对于最简单的情况,我们都提到:
select id from mytbl
group by id
和
select distinct id from mytbl
我们知道,他们会生成相同的查询计划,这些计划在Which is better: Distinct or Group By
等项目中反复提及 然而,在蜂巢中,前者只有一个减少任务,而后者有很多。通过实验,我发现GROUP BY比DISTINCT快 10+次。
他们是不同的。
所以我学到的是:
GROUP-BY无论如何都不比DISTINCT差,有时候会更好。
我想知道:
1 的。如果这个结论是真的。
2 的。如果为真,我会将DISTINCT视为一种方便的逻辑方法,但为什么DISTINCT不采用GROUP-BY更好的实现?
3 的。如果不对,我会非常渴望知道它在大数据情况下的合理使用。
非常感谢!!:)
答案 0 :(得分:15)
您的经历很有趣。我没有看到distinct
与group by
的单一缩减效果。也许两个结构之间的优化器存在一些细微差别。
Hive中一个“着名”的例子是:
select count(distinct id)
from mytbl;
与
select count(*)
from (select distinct id
from mytbl
) t;
前者仅使用一个减速器,后者同时运行。我在我的经验中已经看到了这一点,并且有记录和讨论(例如,在presentation中的幻灯片26和27)。因此,distinct
绝对可以利用并行性。
我想,随着Hive的成熟,这些问题将得到解决。然而,具有讽刺意味的是Postgres与COUNT(DISTINCT)
有类似的性能问题,尽管我认为其根本原因有点不同。