Do NULL占用postgresql索引中的空间吗?

时间:2011-02-07 09:08:48

标签: postgresql null indexing storage space

虽然很容易记录N​​ULL在行的postgresql元组头中只占用1位,但是在可空列的INDEX(不是元组,而是索引)中占用多少空间?它是否与索引中的1位相同,或者它是完整的列数据类型大小(EG:整数= 4个字节)?

问题的上下文是我有一个postgresql表,它有3个引用列(EG:foo_id,bar_id和baz_id),对于任何行,只有其中一列具有值(其他2列将是空值)。但是,我需要索引所有3列。假设每列是一个整数(postgresql中为4个字节),每行应占用4个字节(对于非空列)加2位(对于2个空列)。但是,如果我要为所有3列添加索引,则3个索引的存储将是12个字节(如果索引占用空值的全部4个字节)或者相同的4个字节+ 2个比特,如元组本身。

1 个答案:

答案 0 :(得分:1)

btree访问例程使用PageGetItem()从索引中获取实际的键。所以我认为btree索引页面使用与常规堆页面相同的存储方案(包括可空性掩码),它们只是在页面的“特殊”区域中有额外的导航信息来保存所有btree指针。