你的列是否太“宽”

2020-12-23



当你有千万乃至上亿行数据的时候,数据类型就显得非常重要:即使每行多10字节,对于庞大的数据来说,会大大影响储存和运算性能。
 
当我创建一个big_fact_table,我创建了一些VARCHAR字段,但是定义字段宽度时却失败了。Vertica默认情况下设定为VARCHAR(80),然而我的字符串都是8位的字母数字组合,所以为什么VARCHAR(10)就够的情况下我要用VARCHAR(80)?我又创建了一个新表叫“varchar10”,使用相同字段但是把VARCHAR字段转变成了VARCHAR(10),使用 ALTER TABLE … ALTER COLUMN … SET DATA TYPE VARCHAR(10)。
 
这对于表的大小基本完全没影响,多亏了压缩和编码:



但是,当我使用INSERT…SELECT加载数据的时候,性能却大大提升:



这机会快了25%!那么这是为什么呢?在加载和查询的时候,Vertica必须分配足够的资源来放下所有的数据量。如果分配了太多的内存,就会减慢排序和分段,因为Vertica需要对那些空格很多的字段进行数据类型转换。所以优化你的数据类型,非常有助于提升储存和运算性能。
 
更多内容:
https://www.vertica.com/docs/latest/HTML/Content/Authoring/AdministratorsGuide/Tables/ColumnManagement/ReduceColumnWidth.htm