更新时间:2024-06-03 GMT+08:00

表设计最佳实践

使用分区表

分区表是把逻辑上的一张表根据某种方案分成几张物理块进行存储。这张逻辑上的表称之为分区表,物理块称之为分区。分区表是一张逻辑表,不存储数据,数据实际是存储在分区上的。分区表和普通表相比具有以下优点:

  1. 改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索效率。
  2. 增强可用性:如果分区表的某个分区出现故障,表在其他分区的数据仍然可用。
  3. 方便维护:如果分区表的某个分区出现故障,需要修复数据,只修复该分区即可。
    GaussDB数据库支持的分区表为一级分区表和二级分区表,其中一级分区表包括范围分区表、间隔分区表、列表分区表、哈希分区表四种,二级分区表包括范围分区、列表分区、哈希分区两两组合的九种。
    • 范围分区表:将数据基于范围映射到每一个分区,这个范围是由创建分区表时指定的分区键决定的。这种分区方式是最为常用的,并且分区键经常采用日期,例如将销售数据按照月份进行分区。
    • 间隔分区表:是一种特殊的范围分区表,相比范围分区表,新增间隔值定义,当插入记录找不到匹配的分区时,可以根据间隔值自动创建分区。
    • 列表分区表:将数据中包含的键值分别存储在不同的分区中,依次将数据映射到每一个分区,分区中包含的键值由创建分区表时指定。
    • 哈希分区表:将数据根据内部哈希算法依次映射到每一个分区中,包含的分区个数由创建分区表时指定。
    • 二级分区表:由范围分区、列表分区、哈希分区任意组合得到的分区表,其一级分区和二级分区均可以使用前面三种定义方式。

表压缩级别

在创建表时,可以自定义字段的压缩级别及压缩水平。压缩不仅影响到数据加载,也影响到数据查询。表压缩级别由参数COMPRESSION控制。

参数说明:

COMPRESSION指定表数据的压缩级别,它决定了表数据的压缩比以及压缩时间。一般来讲,压缩级别越高,压缩比也越大,压缩时间也越长;反之亦然。实际压缩比取决于加载的表数据的分布特征。

取值范围:

  • 行存表的有效值为YES/NO,默认值为NO。

客户可根据不同场景依据表1选择不同压缩级别。

表1 压缩级别适用场景说明

压缩级别

适用场景

存储方式

YES

启用表压缩:行存表压缩率较低,不建议启用。

行存

NO

禁用表压缩。

行存

选择数据类型

高效数据类型,主要包括以下三方面:

  1. 尽量使用执行效率比较高的数据类型

    一般来说整型数据运算(包括=、>、<、>=、<=、!=等常规的比较运算,以及GROUP BY的效率比字符串、浮点数要高。

  2. 尽量使用短字段的数据类型

    长度较短的数据类型不仅可以减小数据文件的大小,提升I/O性能;同时也可以减小相关计算时的内存消耗,提升计算性能。比如对于整型数据,如果可以用SMALLINT就尽量不用INT,如果可以用INT就尽量不用BIGINT。

  3. 使用一致的数据类型。

    表关联列尽量使用相同的数据类型。如果表关联列数据类型不同,数据库必须动态地转化为相同的数据类型进行比较,这种转换会带来一定的性能开销。