NULL が行の postgresql タプル ヘッダーで 1 ビットしか占有しないことは容易に文書化されていますが、NULL は、NULL 可能な列 (タプルではなくインデックス) の INDEX でどのくらいのスペースを占有しますか? タプルと同じインデックス内の 1 ビットですか、それとも完全な列のデータ型サイズ (例: 整数 = 4 バイト) ですか?
質問のコンテキストは、3 つの参照列 (例: foo_id、bar_id、baz_id) を持つ postgresql テーブルがあり、任意の行について、それらの列の 1 つだけが値を持つことです (他の 2 つの列は NULL になります)。ただし、3 つの列すべてにインデックスを付ける必要があります。各列が整数 (postgresql では 4 バイト) であると仮定すると、各行は 4 バイト (null 以外の列の場合) と 2 ビット (2 つの null 列の場合) を占める必要があります。ただし、3 つの列すべてにインデックスを追加する場合、3 つのインデックスのストレージは 12 バイト (インデックスが NULL 値に 4 バイトをすべて使用する場合) または同じ 4 バイト + 2 ビットのいずれかになります。タプルそのもの。