在 PostgreSQL 中,Null 是否为 TIMESTAMP 数据类型节省空间?

问题描述 投票:0回答:1

我正在尝试创建表来存储大量数据,我想知道是否可以使用 null TIMESTAMP 来节省存储空间?

我有一个变量 update_at,每当我修改关联的行时,该变量都会更新为 NOW() - 大多数行都不会被修改。在这种情况下,在创建表时,与 update_at TIMESTAMPTZ NOT NULL DEFAULT NOW() 相比,update_at TIMESTAMPTZ 会节省一些空间吗?

鉴于使用一个where条件检查字符串是否有字母e(不区分大小写)sql查询,我知道:

对于像 nullable int 这样的固定宽度字段,所需的存储空间是 无论值是否为空,始终相同。

对于可变宽度可为空字段,值“NULL”采用零字节 存储空间(忽略存储该值是否为空的位 或不)。

但是 TIMESTAMPTZDATE 数据类型呢? 我不确定它们是“可变宽度可为空字段”还是“固定宽度可为空字段” - 因此,不确定我是否可以使用 Null 节省一些存储空间。

非常感谢您的帮助!

database postgresql datetime null storage
1个回答
0
投票

一个简单的测试可以解决这个问题,因为

--create tables with 1 million rows
create table test_null as
select id::int8, null::timestamptz
from generate_series(1, 1000000) as id;

create table test_notnull as
select id::int8, now()::timestamptz
from generate_series(1, 1000000) as id;

--refresh table statistics
analyze test_null;
analyze test_notnull;

检查储藏室中的桌子尺寸

select 'test_null' table_name, pg_size_pretty(pg_total_relation_size('test_null')) size
union all
select 'test_notnull' table_name, pg_size_pretty(pg_total_relation_size('test_notnull')) size;
表名 尺寸
测试_空 35MB
测试_notnull 42MB

拨弄测试

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.