【发布时间】:2011-02-07 09:08:48
【问题描述】:
虽然很容易证明 NULL 在该行的 postgresql 元组标题中仅占用 1 位,但 NULL 在可空列(不是元组,而是索引)的 INDEX 中占用了多少空间?是索引中的 1 位与元组中的相同,还是全列数据类型大小(EG:整数 = 4 字节)?
问题的上下文是我有一个 postgresql 表,它有 3 个引用列(例如:foo_id、bar_id 和 baz_id),对于任何行,只有其中一个列有值(其他 2 列是空值)。但是,我需要对所有 3 列进行索引。假设每列是一个整数(在 postgresql 中为 4 个字节),每行应占用 4 个字节(对于非空列)加上 2 位(对于 2 个空列)。但是,如果我要为所有 3 列添加索引,则 3 个索引的存储空间将是 12 个字节(如果索引占用了空值的全部 4 个字节)或与元组本身。
【问题讨论】:
-
好吧,您可以自己部分回答这个问题的一种方式 - 它们不能用(仅)与数据类型所需的相同数量的字节数来表示。在您的 int 示例中,每个可能的 4 个字节组合都代表一个有效的 int 值 - 所以不可能在这四个字节中编码空值。
标签: postgresql null indexing storage space