teradata DISTINCT vs GROUP BY

(–本文是个人学习和使用过程中的总结,如有错误欢迎指正。转载请注明出处)

常听到有关teradata中DISTINCT和GROUP BY那个性能更好的问题,是应该用
SELECT COLUMN GROUP BY 1
还是
SELECT DISTINCT COLUMN呢?

为了确定什么情况用DISTINCT,什么情况用GROUP BY,首先我们应该理解两者的工作方式。
DISTINCT :数据会被直接分布(distributed )到AMPs并去重
GROUP BY:会在每个AMP上首先做分组,然后再将数据分布到AMPs上做二次去重

理解了两者的不同我们可以根据下面的规则选择:

假设我们的数据有很很多不同的值选择DISTINCT 可能更好

假设我们的数据不同的值很少,首先在本地做去重就减少重分布的row,此时我们选择GROUP BY可以更好

——————————————————————————————————————————————————————————————–
不错在我们以前使用的teradata中确实如此,那么在新版本(TD 15)中真的也是这样么?
在此那了一张我们的表做了实验

Tables count(*) DISTINCT/GROUP BY的列 DISTINCT OR GROUP BY DISTINCT/GROUP BY以后的值 耗时(s)
104,960,185 STATISTICAL_DATE DISTINCT 44 3 ~ 5
104,960,185 STATISTICAL_DATE GROUP BY 44 3 ~ 5
104,960,185 XXXX DISTINCT 9,135,577 14 ~ 18
104,960,185 XXXX GROUP BY 9,135,577 14 ~ 18

可以看出来,不论对于重复率很高还是重复率不高的情况下,DISTINCT 和 GROUP BY 差别几乎可以忽略。
不知是否新版本CBO做了改进?

本文是在teradata 环境资源特别闲置的情况下做的,可能其他的或者您的测试结果有出入。仅供参考。

你可能感兴趣的:(teradata)