(–本文是個人學習和使用過程中的總結,如有錯誤歡迎指正。轉載請註明出處)
常聽到有關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 環境資源特別閒置的情況下做的,可能其他的或者您的測試結果有出入。僅供參考。