可空列可以在PostgreSQL中占用额外的空间吗?

可空列可以在PostgreSQL中占用额外的空间吗?,第1张

概述我有一个7列的表,其中5列将为空.我将在int,text,date,boolean和money数据类型上有一个空列.此表将包含数百万行,其中包含许多空值.我担心空值将占用空间. 另外,你知道Postgres是否索引null值?我想阻止它索引null. 基本上,NULL值在NULL位图中占用1位.但它不是那么简单 如果该行中至少有一列持有一个NULL值,则空位图(每行)仅在此位置.这可能导致具有9个 我有一个7列的表,其中5列将为空.我将在int,text,date,boolean和money数据类型上有一个空列.此表将包含数百万行,其中包含许多空值.我担心空值将占用空间.

另外,你知道Postgres是否索引null值?我想阻止它索引null.

基本上,NulL值在NulL位图中占用1位.但它不是那么简单

如果该行中至少有一列持有一个NulL值,则空位图(每行)仅在此位置.这可能导致具有9个或更多列的表中的悖论效应:将第一个NulL值分配给一个列可能会占用磁盘上的空间,而不是向其写入一个值.相反,当最后一列变为非空时,该位将删除空位图.

在物理上,初始空位图在HeapTupleheader(23个字节)和实际列数据之间占据1个字节,或者行OID(如果你应该使用的话),它始终以MAXAliGN的倍数开始(在现代服务器上通常为8个字节) ).这留下了由初始空位图使用的1字节的填充.

实际上,对于8列或更少的表,NulL存储是绝对免费的.
之后,另外4/8字节(通常为8)分配给下一个32/64列.等等.

更多细节@L_301_0@及以下相关问题:

> How much disk-space is needed to store a NULL value using postgresql DB?
> Does not using NULL in PostgreSQL still use a NULL bitmap in the header?
> How many records can I store in 5 MB of PostgreSQL on Heroku?

一旦了解数据类型的填充,您可以进一步优化存储.更多在this related answer.但是案例是罕见的,您可以节省大量的空间.通常这是不值得的努力.

@Daniel已经涵盖了对索引大小的影响.

总结

以上是内存溢出为你收集整理的可空列可以在PostgreSQL中占用额外的空间吗?全部内容,希望文章能够帮你解决可空列可以在PostgreSQL中占用额外的空间吗?所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存