PostgreSQL中文本数组列的高效存储



我的问题主要与数据库存储/空间优化有关。我的数据库中有一个表以下列:

  1. id:主键INTEGER

  2. array_col: UNIQUE TEXT[]

该表是迄今为止数据库中最大的表(就存储空间而言),包含大约~2亿条记录。array_col有一些特点,让我怀疑我我没有以空间最优的方式存储它。它们如下:

  1. 大多数字符串都有合适的长度(平均25个字符)

  2. 文本数组的长度是可变的(通常每个数组100多个字符串)

  3. 单个字符串将以适当的频率在记录中重复自己。平均给定的字符串将出现在数千个其他记录中。(数组顺序趋于相似跨记录too)

    id strong>array_col strong>3[…,"20扭矩离合器settings",…],

    如果你真的想优化存储空间,告诉PostgreSQL在列超过128字节时压缩列:

    ALTER TABLE tab SET (toast_tuple_target = 128);
    

    当然,对空间进行优化可能不利于性能。

最新更新