AWS Redshift 数据类型 space 分配

AWS Redshift Data type space allocation

我打算创建 id CHARACTER VARYING(100) ENCODE ZSTD, id2 字符变化 (5000) 编码 ZSTD。

现在我的 id 和 id1 大约只有 20 个字符。

在 AWS Redshift 中,space 分配是根据实际数据大小(20)进行分配,还是首先根据定义的大小(分别为 100 和 5000)进行分配。如果是这样,性能如何影响这些场景。

谢谢 汤姆

Amazon Redshift 使用 Compression Encoding 存储数据,因此分配最小值 space 并不重要。

通常最好让 Redshift 在通过 COPY 命令加载数据时选择压缩类型,而不是自己指定。这将导致根据加载的前 100,000 行选择最有效的方法。

这里有两件事。

存储:对于 varchars,消耗的 space 量基于所需的实际 space 量,而不是声明的长度(以字节为单位)。

查询性能:Redshift 事先不知道需要多少字节来保存 varchar。它根据为 varchar 声明的长度分配字节数。它会导致查询消耗更多内存,这在某些情况下会导致查询溢出到磁盘。这会对真空性能产生特别负面的影响。

总结:声明 varchars 尽可能短。所以,在你的情况下,如果它是 20 左右,也许 25-30 将是一个很好的长度。