区分和分组,哪个更好 [英] distinct vs group by which is better

查看:17
本文介绍了区分和分组,哪个更好的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们都参考的最简单的情况:

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。如果是假的,我非常想知道它在大数据环境下的像样用法。

非常感谢!!:)

推荐答案

您的经历很有趣。我没有看到distinctgroup by的单个减速器效果。也许这两个构造之间的优化器有一些细微的差异。

《蜂巢》中一个著名的例子是:

select count(distinct id)
from mytbl;

select count(*)
from (select distinct id
      from mytbl
     ) t;
前者只使用一个减速器,而后者是并行运行的。我在我的经验中都看到了这一点,并对其进行了记录和讨论(例如,在本presentation中的幻灯片26和27中)。因此,distinct绝对可以利用并行性。

我想,随着蜂巢的成熟,这样的问题将会得到解决。然而,具有讽刺意味的是,Postgres与COUNT(DISTINCT)也存在类似的性能问题,尽管我认为根本原因略有不同。

这篇关于区分和分组,哪个更好的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆