原文地址:HybridDB · 性能優化 · Count Distinct的幾種實現方式 HybridDB是阿裡基於GreenPlum開發的一款MPP分析性資料庫,而GreenPlum本身基於PostgreSQL。 如此,HybridDB的優化思路和手段難免會受到PostgreSQL影響和限制。 文 ...
原文地址:HybridDB · 性能優化 · Count Distinct的幾種實現方式
HybridDB是阿裡基於GreenPlum開發的一款MPP分析性資料庫,而GreenPlum本身基於PostgreSQL。
如此,HybridDB的優化思路和手段難免會受到PostgreSQL影響和限制。
文中的語句最終優化得到了幾個不同計劃,其優化的語句簡化後形如
select count(distinct c1) from t group by c2;
這條語句在HybridDB下實現:
- 每個伺服器自行分組、計算count(distinct);
- 將上一步結果按照分組列重新分發;
- 每個伺服器根據收到的數據進行二次分組計算;
- 收集彙總到一個伺服器得到最終結果。
文中優化點集中在分組的實現方式上,
a), 排序+分組;
b), hash分組;
c), orca優化方式,同a#,改進在於第一次排序項不同。
原文中a#, b#, c#的計劃概括
a),
Scan (Columnar Scan + Append) -> Sort(category) -> Group by(category) -> Redistribute -> Sort(category) -> Group by(category) -> Sort -> Gather
b),
Scan (Columnar Scan + Append) -> Group by(Hash(category,actionId)) -> Redistribute(category) -> Group by(Hash(category, acitonId)) -> Group by(Hash(category)) -> Sort -> Gather
c),
Scan (Dynamic Scan) -> Sort (category, actionId) -> Group by (category) -> Redistribute -> Sort (category) -> Group by(category) -> Sort -> Gather
個人認為這篇文章提到的優化和MPP關係不大,單機下也許也能得到類似的不同計劃。
也許是受限於數據分佈特性、數據量等因素,MPP下數據分發、彙總的MOTION優化並沒有體現在這裡。