sql - distinct vs group by 哪个更好

标签 sql hadoop hive distinct

对于我们都提到的最简单的情况:

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。如果为假,我会非常渴望知道它在大数据情况下的正确用法。

非常感谢!!:)

最佳答案

你的经历很有趣。我还没有看到 distinctgroup 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/

相关文章:

php - 在 protected 页面上使用 SQL 编辑数据库中的文本

sql - 如何进行嵌套SQL选择计数

python - 派斯帕克 : Can saveAsNewAPIHadoopDataset() be used as bulk loading to HBase?

hadoop - 从数据节点不在主节点存储中

c# - Visual Studio 连接字符串- 相对文件路径?

sql - 使用 Sqlite 将带有自动生成 id 字段的记录插入异步环境中的多个相关表中?

python - Hadoop不可拆分TextInputFormat

python - 如何将百万歌曲数据集等大数据集加载到 BigData HDFS 或 Hbase 或 Hive 中?

hadoop - 如何在配置单元插入到查询中指定列列表

apache-spark - 在 Spark 的 saveAsTable 上