数据分区

数据分区是数据库产品普遍具备的功能。在openGauss中,数据分区是对数据按照用户指定的策略对数据做的水平分表,将表按照指定范围划分为多个数据互不重叠的部分(Partition)。

openGauss支持范围分区(Range Partitioning)功能,即根据表的一列或者多列,将要插入表的记录分为若干个范围(这些范围在不同的分区里没有重叠),然后为每个范围创建一个分区,用来存储相应的数据。用户在CREATE TABLE时增加PARTITION参数,即表示针对此表应用数据分区功能。

例如,表1描述了一个xDR(详单)场景下,基于时间分片的方式分区后带来的收益。

表 1 分区收益

场景描述

收益

当表中访问率较高的行位于一个单独分区或少数几个分区时。

大幅减少搜索空间,从而提升访问性能。

当需要查询或更新一个分区的大部分记录时。

仅需要连续扫描对应分区,而非扫描整个表,因此可大幅提升性能。

当需要大量加载或者删除的记录位于一个单独分区或少数几个分区时。

可直接读取或删除对应分区,从而提升处理性能;同时由于避免大量零散的删除操作,可减少清理碎片工作量。

数据分区带来的好处在于:

  • 改善可管理性:利用分区,可以将表和索引划分为一些更小、更易管理的单元。这样,数据库管理员在进行数据管理时就能采取“分而治之”的方法。 有了分区,维护操作可以专门针对表的特定部分执行。
  • 可提升删除操作的性能:删除数据时可以删除整个分区,与分别删除每行相比,这种操作非常高效和快速。

    删除分区表与删除普通表的语法一致,都是通过DROP TABLE语法进行删除。

  • 改善查询性能:通过限制要检查或操作的数据数量,分区可带来许多性能优势。

    分区剪枝:分区剪枝(也称为分区消除)是openGauss在执行时过滤掉不需要扫描的分区,只对相关的分区进行扫描的技术。分区剪枝通常可以将查询性能提高若干数量级。

  • 智能化分区联接:通过使用一种称为智能化分区联接的技术,分区还可以改善多表联接的性能。当将两个表联接在一起,并且至少其中一个表使用联接键进行分区时,可以应用智能化分区联接。智能化分区联接将一个大型联接分为多个较小的联接,这些较小的联接包含与联接的表“相同”的数据集。这里,“相同”定义为恰好包含联接的两端中相同的分区键值集,因此可以确保只有这些“相同”数据集的联接才会有效,而不必考虑其他数据集。