PostgreSQLの任意の行のオーバーヘッドが
とにかく、すべてのより複雑なタイプには独自のオーバーヘッドがあるため(byteaは4バイトのオーバーヘッドを追加します(たとえば、ビット文字列5〜8))、探していることを達成する唯一の方法は、bigint(8バイト)を使用することです。各値を数値的にシフトし、結果をOR演算します。これは、ビット文字列操作 を使用して実行できます。 コードを簡単にするため(ビット文字列として計算し、格納する前にbigintにキャストする)、または速度を向上させたい場合は手動で乗算/加算します。たとえば、2バイトを2バイト構造にまとめて格納し、それらを元に戻す方法は次のとおりです。
int2 = 256 * byte1 + byte2
byte1 = int2 / 256
byte2 = int2 % 256
同じアイデアを拡張して、7つをそのように保存することができます。検索のオーバーヘッドは依然としてひどいものになりますが、実際にはその過程でいくらかのスペースを節約できます。ただし、行ヘッダーだけに比べるとそれほど多くはありません。