本文为您介绍云原生数据仓库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