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