另外,你知道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中占用额外的空间吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)