首页 > 数据库 > mysql教程 > PostgreSQL 中的 NULL 值实际消耗多少磁盘空间?

PostgreSQL 中的 NULL 值实际消耗多少磁盘空间?

Susan Sarandon
发布: 2024-12-26 03:26:10
原创
812 人浏览过

How Much Disk Space Do NULL Values in PostgreSQL Really Consume?

NULL 值对 PostgreSQL 磁盘空间消耗的影响

在 PostgreSQL 中,允许 NULL 值的列的存储要求与强制值的列不同。考虑下面的表列定义:

"MyColumn" smallint NULL
登录后复制

存储整数(例如 0、1 或任何其他值)需要 2 个字节。但是,问题来了:当“MyColumn”设置为NULL时,会消耗多少磁盘空间?它占用 0 字节吗?

位图与 NULL 存储

与最初假设的 0 字节消耗相反,NULL 值不占用任何空间。相反,PostgreSQL 使用 位图 来跟踪表中每列的 NULL 状态。位图中的每一位代表特定行的 NULL/NOT NULL 状态。

但是,位图并未分配给每一行。相反,数据对齐是一个需要考虑的因素。 HeapTupleHeader包含每行的信息,占用23字节。数据以 MAXALIGN 的倍数(通常为 8 字节)开始对齐,为空位图留下一个字节的填充。

磁盘空间要求

由于这些因素,空存储对于最多 8 列的表来说实际上是免费的。但是,对于具有更多列的表,需要额外的磁盘空间,如下所示:

  • 为下一组 64 列分配额外的 MAXALIGN 字节(通常为 8)。
  • 空间为仅当行中至少存在一个实际 NULL 值时才分配。
  • 在系统目录中标记为此类的删除列仍然占用一点空间在空位图中。

真实世界测试

广泛的测试已经证实了这些观察结果。有关更多详细信息,请参阅以下讨论:

  • https://dba.stackexchange.com/questions/4452/does-not-using-null-in-postgresql-still-use-a -标题中的空位图

以上是PostgreSQL 中的 NULL 值实际消耗多少磁盘空间?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板