You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中TIMESTAMP字段存Null能否节省存储空间?

可空TIMESTAMPTZ与非空带默认值的存储空间对比

在PostgreSQL中,TIMESTAMPTZ属于固定宽度类型,每个非NULL值占用8字节存储空间。针对你的场景,两种字段定义的存储空间差异如下:

  • 若使用update_at TIMESTAMPTZ(可空):
    未被修改的行中该字段为NULL,此时PostgreSQL不会存储这8字节的时间数据,仅会在该行的NULL位图中用一个位标记该字段为NULL。NULL位图的开销极小——每8个可空字段仅占用1字节,单字段的这个开销几乎可以忽略。

  • 若使用update_at TIMESTAMPTZ NOT NULL DEFAULT NOW():
    所有行(包括从未修改的行)都会存储一个8字节的时间戳值,没有例外。

由于你的场景里大部分行不会被修改,使用可空的TIMESTAMPTZ定义能显著节省存储空间——每一行未修改的行都能省下8字节,对于海量数据的表来说,累计的空间节省会非常可观。

补充:你提到的“固定宽度可空字段无论值是否为Null存储空间相同”的情况并不适用于PostgreSQL。PostgreSQL中,固定宽度可空字段的NULL值不会占用该字段本身的存储空间,仅通过NULL位图标记。

内容的提问来源于stack exchange,提问作者Greenhill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 02:13:11