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 環境資源特別閒置的情況下做的,可能其他的或者您的測試結果有出入。僅供參考。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章