少用字符串类型
与 MySQL 类似,能用 数值类型 或 日期时间类型 ,就不要用 字符串类型,否则需要类型转换
使用时更加方便、执行效率高、可读性好
如下:
create table t_order_rmt(
id UInt32 COMMENT '主键',
sn String COMMENT '订单编号',
total Decimal(11,2) COMMENT '总金额',
create_time Datetime COMMENT '创建时间'
)
engine=ReplacingMergeTree(create_time)
partition by toYYYYMMDD(create_time)
primary key(id)
order by (id, sn);
由于 create_time 是 Datetime 类型,所以分区时,可以写成 toYYYYMMDD(create_time) ,就可以返回 年月日
DateTime类型
底层将 DateTime 存储为 时间戳 Long 类型,但不建议直接存储Long 类型,因为 DateTime 不需要经过函数转换处理,执行效率高、可读性好
不要用 空值类型
原因一:官方已经指出 Nullable 类型几乎总是会拖累性能,因为存储 Nullable 列时需要 创建一个额外的文件来存储 NULL 的标记,并且 Nullable 列无法被索引。
原因二: NULL 参与运算时,结果也是 NULL,导致运算错误
所以,一般使用以下方式 表示空:
- 使用字段默认值
- 指定一个在业务中无意义的值。如:用
-1表示订单编号、年龄、价格为空
参考:
https://blog.csdn.net/qq_40378034/article/details/120473116