在Redshift中创建大型VARCHAR值有缺点吗?

sim*_*ing 8 sql ddl amazon-redshift

源数据不断为字段投放值,使其长度越来越大.现在我正在使用VARCHAR(200),但我可能会去VARCHAR(400).使用大量数据有什么缺点吗?

Yur*_*sky 8

为方便起见,请不要使用最大列大小.

相反,请考虑您可能存储在VARCHAR列中的最大值,并相应地调整列的大小.由于Amazon Redshift非常有效地压缩列数据,因此创建比所需大得多的列对数据表的大小影响最小.但是,在处理复杂查询期间,可能需要将中间查询结果存储在临时表中.由于临时表未压缩,因此不必要的大型列会消耗过多的内存和临时磁盘空间,这会影响查询性能.

http://docs.aws.amazon.com/redshift/latest/dg/c_best-practices-smallest-column-size.html

  • 好吧,这些文档是由数据库维护者编写的,所以我猜它在里面是有原因的。更重要的是,我已经对其进行了测试,并且确实有所作为。如果不得不猜测的话,我怀疑当列“重新实现”为行时,数据库会在查询处理期间为潜在的巨大列分配额外的RAM。 (2认同)

Gor*_*off 3

你说的“缺点”是什么?如果您没有使列足够大,则会有一个非常大的缺点 - 您无法使用它来存储您想要存储在那里的值。

至于额外的开销,你不需要担心。类型varchar()基本上只占用值所需的存储空间,加上少量的长度开销。而且,“400”并不是一个很大的数字,尤其是与“200”相比。

因此,如果需要 400 字节来存储该值,请更改表来存储它。更改值的长度可能会产生开销。我不确定 RedShift 是否会因为类型发生变化而感到需要复制数据。然而,对性能的影响应该可以忽略不计。