字段设计应使用推荐类型。
字段设计需使用推荐字段,如果需要使用禁用、不推荐的字段类型,建议联系技术支持进行评估。
这些数据类型不推荐或禁止的原因是业务使用场景较少,未大规模商用。
对于业务上有迫切字段类型要求的,联系技术支持,提交需求。
表1 数据库数据类型最佳实践
合理选用字符串数据类型。优先使用变长字符类VARCHAR。只有该字段输入确定为固定字符则使用定长字符类型,或需要自动补充空格,才使用CHAR(n)。
说明:
典型的定长字段类型,例如“sex”字段,仅允许输入“f”或“m”一个字节长度的字符。这类字段建议使用定长数据类型(如CHAR(n))。
如果不存在此特点,或者后续可能扩展需要输入更长的字符,请优先使用变长字符类型(如VARCHAR, TEXT),且不建议指定变长类型的长度。
原因如下:
定长字段会对不够长度的输入数据补充空格,然后存入数据库中,产生不必要的存储空间浪费。
如果定义为定长字符类型,后续扩展长度,需要对全表进行扫描重写,性能开销大,影响在线业务。
对于指定固定长度的变长字段,每次插入时会检查是否长度越界,带来性能开销。
字符类型字段不应存储数字类型的数据。
如果对存储在字符类型字段中的数据进行数值计算,或者与数值进行比较操作(如置于过滤条件中),会带来不必要的数据类型转换的开销,同时该字段上的索引可能失效,影响查询性能。
字符类型字段不应存储时间或日期类数据。
如果对存储在字符类型字段中的数据与日期类数据进行计算或比较操作(如置于过滤条件中),会带来不必要的数据类型转换的开销,同时该字段上的索引可能失效,影响查询性能。
对于明确不存在NULL值的字段加上NOT NULL约束。
对于NOT NULL字段,优化器在某些场景下会进行特殊优化,可较大提升查询性能。
相关联字段的数据类型应保持一致。
在进行关联操作时,如果字段类型不一致,会带来数据类型转换开销。
大字段(例如varchar(1000)、varchar(4000))不建议超过8个。
字段定义时建议同时创建COMMENT注释信息,以便于未来维护。
不同类型字段说明、取值范围及使用方法请参考数据类型章节。
用于WHERE条件过滤和关联的字段都应设置NOT NULL约束。
对于NOT NULL字段,优化器在某些场景下会进行特殊优化,可较大提升查询性能。
不建议对表预留字段。大部分场景下可支持快速新增、删除表字段,或者修改字段的DEFAULT值。
说明:
新增列必须符合以下要求,否则会带来全表更新开销,影响在线业务。
数据类型为以下类型中的一种:BOOL, BYTEA, SMALLINT, BIGINT, SMALLINT, INTEGER, NUMERIC, FLOAT, DOUBLE PRECISION, CHAR, VARCHAR, TEXT, TIMESTAMPTZ, TIMESTAMP, DATE, TIME, TIMETZ, INTERVAL;
新增列的DEFAULT值长度不超过128个字节;
新增列DEFAULT值不包含volatile函数;
新增列设置有DEFAULT值,且DEFAULT值不为NULL。
如果不确定是否满足条件,请联系数据库技术人员进行评估。
尽量使用高效的数值类数据类型。在满足业务精度的情况下,选择的优先级从高到低依次为整数、浮点数、NUMERIC。
合理设置数值字段的数据类型,根据取值范围选择合适的数值类型,尽量少用NUMERIC/DECIMAL类型。
NUMERIC和DECIMAL等价,NUMERIC(或DECIMAL)数据类型操作对CPU消耗较高。
表2 数值类数据类型存储空间及取值范围





