在 Redshift 中为
VARCHAR
列选择压缩编码时,当该列包含一小组潜在字符串值时,会出现两个选项:text255
和 bytedict
。查看 AWS 文档 中对这些内容的描述,它们似乎执行相同的操作,但 bytedict
可以比 text255
多容纳 20 个值。那么,text255
比 bytedict
有什么优势呢?
在这里提供一个例子,假设我有一个包含日本地区的列:[“hokkaido”,“tohoku”,“kanto”,“hokuriku”,“chubu”,“kansai”,“chokoku”,“shikoku” 、“九州”、“冲绳”]。
这些值将适合
VARCHAR(8)
列。如果我使用 text255
编码,则列中的每一行将消耗 1 个字节,并为字典条目额外消耗 80 个字节。根据我的理解,bytedict
将提供完全相同的存储,并且对数据库查询的操作类似。那么,有什么区别呢?我注意到 text255
似乎使用术语“单词”而不是“列值”,所以它是按单词压缩的吗?如果是这样,我无法想象这将如何用于查询。
Bytedict 保存任何数据类型,但您注意到了这一点。 Bytedict 还对列的整个值进行操作。 Text256 对列文本值中的单词进行操作。
使用您的示例,如果相关列是“日本的地址”并且该区域是此列中文本的一部分,则 text255 可以用 1 字节索引替换这些区域名称。 列中的每个字(几个字节)都被 1 个字节替换。 Bytedict 只能索引整个值,并且由于此类列中可能存在大量唯一值,因此压缩此列几乎没有作用。
Text255 更适合其中包含大量重复单词的文本字符串值。
不过,通常最好对代表性数据(如果可用)执行和分析压缩,以了解所有可能性中的最佳编码。