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

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

Linda Hamilton
Linda Hamilton原创
2024-12-28 21:52:12655浏览

How Much Disk Space Does a NULL Value Actually Consume in PostgreSQL?

了解 PostgreSQL 数据库中的空值存储

使用数据库时,优化存储空间以获得高效性能至关重要。处理 NULL 值时会出现一个常见问题:存储 NULL 值需要多少磁盘空间?

在 PostgreSQL 中,NULL 值的存储因上下文而异。让我们考虑一下给出的示例,其中列“MyColumn”被定义为“smallint NULL”。在这种情况下,存储像 0 或 1 这样的值通常需要 2 个字节。

存储 NULL 值

当“MyColumn”设置为 NULL 时,存储要求变得更加细致。与直觉相反,NULL 值并不占用 0 字节。相反,PostgreSQL 使用一种称为位图索引的技术来跟踪空值。对于表中的每一行,都会创建一个位图来标记哪些列包含 NULL 值。

现在,让我们分析一下这种方法的存储含义:

  • 表少于 8 列: 对于最多 8 列的表,空位图存储在行的标题中,利用其他未使用的字节填充。因此,在此类表中存储 NULL 值实际上没有额外的空间开销。
  • 具有 8 个或更多列的表: 对于具有 8 个或更多列的表,空位图需要 MAXALIGN 的额外空间字节(通常为 8 字节)。无论任何列是否包含 NULL 值,都会为每一行分配此空间。

其他注意事项

  • 对齐: 行数据必须与特定边界对齐以优化内存访问。如果空位图不适合剩余的填充空间,则可能会添加额外的对齐字节,这可能会增加存储要求。
  • 删除的列:甚至是已从表中删除的列定义可能仍然反映在空位图中,占用一点空间。 VACUUM FULL 无法删除此空间,需要转储/恢复周期来回收它。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn