区分和分组,哪个更好 [英] distinct vs group by which is better
本文介绍了区分和分组,哪个更好的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我们都参考的最简单的情况:
select id from mytbl
group by id
和
select distinct id from mytbl
我们知道,它们生成相同的查询计划,这在Which is better: Distinct or Group By
等项目中已经反复提到但是,在蜂窝中,前者只有一个Reduce任务,而后者有多个。
通过实验,我发现GROUP BY比DISTINCT快10倍以上。
它们不同。
所以我了解到的是:
GROUP-BY无论如何都不比DISTINCT差,有时甚至更好。
我想知道:
%1。如果这个结论是真的。
%2。如果是真的,我会考虑将DISTINCT作为一种逻辑方便的方法,但为什么DISTINCT不采用GROUP-BY更好的实现?
%3。如果是假的,我非常想知道它在大数据环境下的像样用法。
非常感谢!!:)
推荐答案
您的经历很有趣。我没有看到distinct
与group by
的单个减速器效果。也许这两个构造之间的优化器有一些细微的差异。
《蜂巢》中一个著名的例子是:
select count(distinct id)
from mytbl;
与
select count(*)
from (select distinct id
from mytbl
) t;
前者只使用一个减速器,而后者是并行运行的。我在我的经验中都看到了这一点,并对其进行了记录和讨论(例如,在本presentation中的幻灯片26和27中)。因此,distinct
绝对可以利用并行性。
我想,随着蜂巢的成熟,这样的问题将会得到解决。然而,具有讽刺意味的是,Postgres与COUNT(DISTINCT)
也存在类似的性能问题,尽管我认为根本原因略有不同。
这篇关于区分和分组,哪个更好的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文