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

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

Patricia Arquette
发布: 2024-12-25 22:18:17
原创
597 人浏览过

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

在 PostgreSQL 中存储 NULL 值所需的磁盘空间

将列定义为可为 null 的smallint 时,假设存储 0 或 1 等值需要 2 个字节。但是,问题来了:当列设置为 NULL 时,会占用多少空间?

存储优化

在 PostgreSQL 中,NULL 值不需要任何专用的存储空间。相反,位图用于指示行中的哪些列包含 NULL 值。对于任何具有一个或多个空值的行,适当大小的位图(向上舍入到最近的字节)将添加到行的标题中。

数据对齐注意事项

数据对齐起着至关重要的作用在内存管理中的作用。在 PostgreSQL 中,HeapTupleHeader(行头)占用 23 个字节,列数据始终与 MAXALIGN 的倍数(通常为 8 个字节)对齐。因此,行标题中存在一个字节的填充,可供​​空位图使用。

小表的免费存储

由于上述数据对齐,表最多最多 8 列可以完全免费存储 NULL 值。超出此限制,将为接下来的 64 列分配额外的 MAXALIGN 字节,依此类推。但是,仅当行中存在实际空值时,才会占用此额外空间。

删除的列和空位图

即使从表中删除列,它们仍会继续占用一点如果它们仍然列在 pg_attribute 系统目录中,则位于空位图中。因此,删除的列可能会增加空位图所需的空间,即使在 VACUUM FULL 操作之后,空位图也可能持续存在。

结论

PostgreSQL 中的 NULL 值是使用位图机制有效存储的。但是,数据对齐和表中的列数可能会影响存储这些值所需的磁盘空间量。了解这些优化技术有助于优化数据库性能并最大限度地减少存储需求。

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

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