在PostgreSQL中不使用NULL仍然在标题中使用NULL位图?

在PostgreSQL中不使用NULL仍然在标题中使用NULL位图?,第1张

概述显然PostgreSQL在 header of each database row中存储了几个值. 如果我不在该表中使用NULL值 – 那么空位图还在吗? 用NOT NULL定义列有什么区别吗? 实际上比这更复杂. 空位图在行中每列需要一位,舍入到全部字节.只有在实际的行包含至少一个NULL值并且在这种情况下才被完全分配的情况下才是这样. NOT NULL约束不直接影响. (当然,如果你的表的所有 显然Postgresql在 header of each database row中存储了几个值.

如果我不在该表中使用NulL值 – 那么空位图还在吗?
用NOT NulL定义列有什么区别吗?

实际上比这更复杂.

空位图在行中每列需要一位,舍入到全部字节.只有在实际的行包含至少一个NulL值并且在这种情况下才被完全分配的情况下才是这样. NOT NulL约束不直接影响. (当然,如果你的表的所有字段都不为空,则永远不能有一个空位图.)

“堆元组头”(每行)长23个字节.实际数据以MAXAliGN的倍数开始,在64位 *** 作系统上通常为8个字节(32位 *** 作系统上为4个字节).以root用户身份从Postgresql二进制目录中运行以下命令,以获得确定的答案:

./pg_controldata /path/to/my/dbcluster

在Postgres 9.3的典型Debian安装中,将是:

sudo /usr/lib/postgresql/9.3/bin/pg_controldata /var/lib/postgresql/9.3/main

无论哪种方式,头部和数据的对齐开始之间都有一个空闲字节,这是空位图可以利用的.只要您的表具有8列或更少的列,空存储就可以绝对免费(就磁盘空间而言).

之后,另一个MAXAliGN(通常为8个字节)被分配用于空位图(加上填充)以覆盖另外(通常)64个字段.等等.

这对于至少版本8.4 – 9.6有效,并且很有可能不会改变.

总结

以上是内存溢出为你收集整理的在PostgreSQL中不使用NULL仍然在标题中使用NULL位图?全部内容,希望文章能够帮你解决在PostgreSQL中不使用NULL仍然在标题中使用NULL位图?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1170172.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存