儘管很容易記錄NULL在行的postgresql元組頭中僅佔用1位,但NULL在可空列(不是元組,索引)的INDEX中佔用多少空間?索引中的索引與元組中的索引相同,還是全列數據類型大小(EG:integer = 4字節)?NULL是否佔用postgresql索引中的空間?
問題的上下文是,我有一個postgresql表,有3個引用列(EG:foo_id,bar_id和baz_id),對於任何行,只有其中一列會有一個值(其他2列會爲NULL)。但是,我需要對所有3列進行索引。假設每列都是一個整數(postgresql中的4個字節),每行應占用4個字節(對於非空列)加2個位(對於2個空列)。但是,如果我要爲所有3列添加索引,那麼3個索引的存儲空間將爲12個字節(如果索引佔用空值的全部4個字節),或者與4個字節相同的4個字節+ 2個位元組本身。
那麼,你可以自己部分地回答這個問題的一種方式 - 它們不能用(僅)與數據類型所需的相同數量的字節表示。在你的int示例中,4個字節的每個可能的組合代表一個有效的int值 - 所以不可能在這四個相同的字節中編碼一個空值。 – 2011-02-07 09:25:54