PostgreSQL 中 NULL 值的磁盘空间要求
创建数据库表时,考虑其列的存储要求非常重要,尤其是处理可为空值时。了解 NULL 值的存储方式可以优化磁盘空间使用。
NULL 值的存储
在 PostgreSQL 中,NULL 值使用位掩码表示,称为空位图。位图中的每一位对应于表中的一列。如果某位设置为 1,则表示对应列为 NULL。
NULL 位图占用的磁盘空间
空位图的大小取决于表中的列数。对于8列或更少的表,位图占用1个字节。对于9到64列的表,占用2个字节,以此类推。但是,由于数据对齐的原因,无论列数多少,包含至少一个 NULL 值的行的最小存储要求是 1 个字节。
NULL 列的开销
除了空位图之外,管理空列不需要额外的字节。然而,在系统目录 pg_attribute 中标记为“已删除”的已删除列仍占用空位图中的一位。此开销可能会持续到执行转储/恢复周期为止。
示例和测试结果
考虑一个具有以下列定义的表:
"MyColumn" smallint NULL
在此列中存储值 0 或 1 将需要 2 个字节。对于 NULL 值,适用以下存储要求:
对于具有 8 或更少列的表:
适用于 9 至 64 人的桌子列:
对于超过 64 列的表:
广泛的测试表明这些存储要求对于所有表都是一致的。通过在小表(少于 9 列)中存储 NULL 值来优化磁盘空间使用是有益的,但在较大的表中它变得不那么重要。
以上是PostgreSQL 中 NULL 值实际使用了多少磁盘空间?的详细内容。更多信息请关注PHP中文网其他相关文章!