我打算创建id CHARACTER VARYING(100)ENCODE ZSTD,id2 CHARACTER VARYING(5000)ENCODE ZSTD。
现在我的id和id1大约只有20个字符。
在AWS Redshift中,空间分配是根据实际数据大小(即20)进行的,还是先根据定义的大小(分别为100和5000)进行分配。如果是这样,性能如何影响这些情况。
谢谢TOM
这里有两件事。
存储:对于varchars,消耗的空间量基于实际所需的空间量,而不是声明的长度(以字节为单位)。
查询性能:Redshift事先不知道保存varchar需要多少字节。它根据为varchar声明的长度分配字节数。它会导致查询占用更多内存,在某些情况下会导致查询溢出到磁盘。这会对真空性能产生特别不利的影响。
摘要:声明varchars尽可能短。所以,在你的情况下,如果它是20左右,也许25-30将是一个很好的长度。
Amazon Redshift使用Compression Encoding存储数据,因此分配最小空间并不重要。
通过COPY
命令加载数据时,通常最好允许Redshift选择压缩类型,而不是自己指定。这将导致选择最有效的方法,基于加载的前100,000行。