本文為您介紹云原生數據倉庫AnalyticDB PostgreSQL版如何通過底層的數據順序加速查詢速度。

當您執行SORT <tablename>后,系統會對表數據進行排序,當數據完成排序后,AnalyticDB PostgreSQL版即可利用數據的物理順序,將SORT算子下推到存儲層進行計算加速。如果您的SQL可以利用底層的數據順序,則會從中獲得加速收益,該特性可以基于SORT KEY加速SORT、AGG、JOIN算子。

說明
  • 排序加速計算功能需要數據完全有序,當您寫入數據后需要重新執行SORT <tablename>對數據進行排序。
  • 排序加速計算功能默認開啟。

示例

以下示例將在測試表far中執行同樣的查詢語句,對比排序加速前與排序加速后查詢時間的差距。

  1. 創建測試表far,語句如下:
    CREATE TABLE far(a int,  b int)
    WITH (APPENDONLY=TRUE, COMPRESSTYPE=ZSTD, COMPRESSLEVEL=5)
    DISTRIBUTED BY (a)  --分布鍵
    ORDER BY (a);       --排序鍵
  2. 寫入1000000行數據,語句如下:
    INSERT INTO far VALUES(generate_series(0, 1000000), 1);
  3. 數據導入完成后,對數據進行排序,語句如下:
    SORT far;

查詢性能對比如下:

說明 當前示例的查詢時間僅供參考。查詢時間受到數據量、計算資源、網絡狀況等多個因素影響,請以實際為準。
  • ORDER BY加速
    • 排序加速前(未排序)order by加速前
    • 排序加速后order by加速后
  • GROUP BY加速
    • 排序加速前(未排序)group by加速前
    • 排序加速后group by加速后
  • JOIN加速
    • 排序加速前(未排序)JOIN加速前
    • 排序加速后
      說明 JOIN排序加速需要關閉ORCA功能,打開mergejoin功能,語句如下:
      SET enable_mergejoin TO on;
      SET optimizer TO off;
      JOIN加速后
- ORDER BY GROUP BY JOIN
加速前 323.980 ms 779.368 ms 289.075 ms
加速后 6.971 ms 6.859 ms 12.315 ms