本文為您介紹云原生數據倉庫AnalyticDB PostgreSQL版如何通過底層的數據順序加速查詢速度。
當您執行SORT <tablename>
后,系統會對表數據進行排序,當數據完成排序后,AnalyticDB PostgreSQL版即可利用數據的物理順序,將SORT算子下推到存儲層進行計算加速。如果您的SQL可以利用底層的數據順序,則會從中獲得加速收益,該特性可以基于SORT KEY加速SORT、AGG、JOIN算子。
說明
- 排序加速計算功能需要數據完全有序,當您寫入數據后需要重新執行
SORT <tablename>
對數據進行排序。 - 排序加速計算功能默認開啟。
示例
以下示例將在測試表far中執行同樣的查詢語句,對比排序加速前與排序加速后查詢時間的差距。
- 創建測試表far,語句如下:
CREATE TABLE far(a int, b int) WITH (APPENDONLY=TRUE, COMPRESSTYPE=ZSTD, COMPRESSLEVEL=5) DISTRIBUTED BY (a) --分布鍵 ORDER BY (a); --排序鍵
- 寫入1000000行數據,語句如下:
INSERT INTO far VALUES(generate_series(0, 1000000), 1);
- 數據導入完成后,對數據進行排序,語句如下:
SORT far;
查詢性能對比如下:
說明 當前示例的查詢時間僅供參考。查詢時間受到數據量、計算資源、網絡狀況等多個因素影響,請以實際為準。
- ORDER BY加速
- 排序加速前(未排序)
- 排序加速后
- GROUP BY加速
- 排序加速前(未排序)
- 排序加速后
- JOIN加速
- 排序加速前(未排序)
- 排序加速后
說明 JOIN排序加速需要關閉ORCA功能,打開mergejoin功能,語句如下:
SET enable_mergejoin TO on; SET optimizer TO off;
- | ORDER BY | GROUP BY | JOIN |
---|---|---|---|
加速前 | 323.980 ms | 779.368 ms | 289.075 ms |
加速后 | 6.971 ms | 6.859 ms | 12.315 ms |