开发者社区 问答 正文

如何使用HybridDB for PostgreSQL排序键(SortKey)



排序键是什么


排序键(SortKey)是表的一种属性,可以将数据按照排序键顺序存储在磁盘文件中。排序键主要有两大优势:


  • 加速列存优化,收集的min、max元信息很少重叠,过滤性很好;

  • 对于含有order by和group by等需要排序的SQL可以避免再次排序,直接从磁盘中读取出来就是满足条件的有序数据。


创建表时定义排序键Command:     CREATE TABLE
Description: define a new table
Syntax:
CREATE [[GLOBAL | LOCAL] {TEMPORARY | TEMP}] TABLE table_name (
[ { column_name data_type [ DEFAULT default_expr ]     [column_constraint [ ... ]
[ ENCODING ( storage_directive [,...] ) ]
]
   | table_constraint
   | LIKE other_table [{INCLUDING | EXCLUDING}
                      {DEFAULTS | CONSTRAINTS}] ...}
   [, ... ] ]
   [column_reference_storage_directive [, ] ]
   )
   [ INHERITS ( parent_table [, ... ] ) ]
   [ WITH ( storage_parameter=value [, ... ] )
   [ ON COMMIT {PRESERVE ROWS | DELETE ROWS | DROP} ]
   [ TABLESPACE tablespace ]
   [ DISTRIBUTED BY (column, [ ... ] ) | DISTRIBUTED RANDOMLY ]
   [ SORTKEY (column, [ ... ] )]
   [ PARTITION BY partition_type (column)
       [ SUBPARTITION BY partition_type (column) ]
          [ SUBPARTITION TEMPLATE ( template_spec ) ]
       [...]
    ( partition_spec )
        | [ SUBPARTITION BY partition_type (column) ]
          [...]
    ( partition_spec
      [ ( subpartition_spec
           [(...)]
         ) ]
    )




样例: create table test(date text, time text, open float, high float, low float, volume int) with(APPENDONLY=true,ORIENTATION=column) sortkey (volume);


对表进行排序VACUUM SORT ONLY [tablename]




修改排序键


这个命令只改catalog不会对数据立即排序,需要通过VACUUM SORT ONLY命令排序。 ALTER [[GLOBAL | LOCAL] {TEMPORARY | TEMP}] TABLE table_name SET SORTKEY (column, [ ... ] )

样例: alter table test set sortkey (high,low);


注意事项

  • 一旦对表进行了更新(例如Insert、Update、Delete),表的数据将被视为未按排序键排序,查询中不会将直接从磁盘读出的数据视为有序数据。这时需要重新执行VACUUM SORT ONLY命令重新整理表数据

展开
收起
云栖大讲堂 2017-11-01 11:27:59 1852 分享 版权
阿里云 AI 助理回答

您提到的排序键(SortKey)概念主要应用于数据库系统中,特别是在分布式数据存储和处理领域,比如Amazon Redshift或者早期的Greenplum数据库等。在阿里云的产品体系中,虽然直接对应的概念可能不叫“排序键”,但类似的功能设计思想体现在不同的产品和服务中,尤其是在大数据处理和分析服务里。

阿里云MaxCompute(原ODPS)

在阿里云MaxCompute中,虽然没有直接使用“排序键”这一术语,但其提供了分区表(Partitioned Table)的概念来优化查询性能。通过合理地对大表进行分区,可以显著加速涉及分区列的查询操作,原理类似于利用排序键加速特定类型查询。MaxCompute支持按照时间、地域或其他业务维度对数据进行分区,用户在创建表时定义分区列,并在加载数据时指定分区值。

阿里云AnalyticDB(原ADS)

对于实时分析型数据库AnalyticDB(特别是AnalyticDB for PostgreSQL),虽然标准SQL命令如CREATE TABLEALTER TABLE适用,但具体到排序优化,AnalyticDB更多依赖于其内部的列存索引、物化视图以及智能优化器来自动提升查询效率,而不是直接让用户设置排序键。AnalyticDB能够自动分析查询模式并优化存储与执行计划,以达到高性能查询的目的。

表和数据管理

在阿里云的数据管理服务中,虽然没有直接提供修改表排序方式的命令如VACUUM SORT ONLY,但用户可以通过重新组织数据、优化表结构或利用索引来改善查询性能。例如,在MaxCompute中,如果数据分布或查询需求发生变化,可以通过重写数据或调整分区策略来优化。

总结

阿里云的大数据处理和分析服务虽然没有直接沿用“排序键”的概念,但提供了多种机制和工具来实现类似的数据优化目的,包括但不限于分区、索引、物化视图和智能优化策略。用户应根据具体的业务场景和所选服务的特点,选择合适的方法来优化数据存储和查询性能。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答