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 环境资源特别闲置的情况下做的,可能其他的或者您的测试结果有出入。仅供参考。
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。