对于我们都提到的最简单的情况:
select id from mytbl
group by id
和
select distinct id from mytbl
正如我们所知,它们生成相同的查询计划,这在一些项目中被反复提及,如 Which is better: Distinct or Group By
而在hive中,前者只有一个reduce任务,而后者有多个。
根据实验,我发现 GROUP BY 比 DISTINCT 快 10 倍。
它们是不同的。
所以我学到的是:
GROUP-BY 无论如何都不比 DISTINCT 差,而且有时会更好。
我想知道:
1。如果这个结论成立。
2。如果为真,我将考虑将 DISTINCT 作为一种逻辑上方便的方法,但为什么 DISTINCT 不采用 GROUP-BY 的更好实现方式?
3。如果为假,我会非常渴望知道它在大数据情况下的正确用法。
非常感谢!!:)
最佳答案
你的经历很有趣。我还没有看到 distinct
与 group by
的单一缩减器效果。两种构造之间的优化器可能存在一些细微差别。
Hive 中的一个“著名”示例是:
select count(distinct id)
from mytbl;
对比
select count(*)
from (select distinct id
from mytbl
) t;
前者只使用一个reducer,后者并行运行。我以我的经验看到了这一点,并且对其进行了记录和讨论(例如,在本 presentation 的幻灯片 26 和 27 上)。因此,distinct
绝对可以利用并行性。
我想随着 Hive 的成熟,这些问题会得到解决。然而,具有讽刺意味的是,Postgres 与 COUNT(DISTINCT)
有类似的性能问题,尽管我认为根本原因有点不同。
关于sql - distinct vs group by 哪个更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31876137/