sql >> データベース >  >> RDS >> PostgreSQL

Postgresに1バイトの数値を保存することは可能ですか?

    PostgreSQLの任意の行のオーバーヘッドが23バイト (HeapTupleHeaderData)、これだけ少量のスペースを気にする場合は、データを保存するための間違った方法を選択した可能性があります。

    とにかく、すべてのより複雑なタイプには独自のオーバーヘッドがあるため(byteaは4バイトのオーバーヘッドを追加します(たとえば、ビット文字列5〜8))、探していることを達成する唯一の方法は、bigint(8バイト)を使用することです。各値を数値的にシフトし、結果をOR演算します。これは、ビット文字列操作 を使用して実行できます。 コードを簡単にするため(ビット文字列として計算し、格納する前にbigintにキャストする)、または速度を向上させたい場合は手動で乗算/加算します。たとえば、2バイトを2バイト構造にまとめて格納し、それらを元に戻す方法は次のとおりです。

    int2 = 256 * byte1 + byte2
    byte1 = int2 / 256
    byte2 = int2 % 256
    

    同じアイデアを拡張して、7つをそのように保存することができます。検索のオーバーヘッドは依然としてひどいものになりますが、実際にはその過程でいくらかのスペースを節約できます。ただし、行ヘッダーだけに比べるとそれほど多くはありません。



    1. Laravel:クエリビルダーを使用してwhere句を追加する方法は?

    2. node.js postgresqlモジュールを使用する適切な方法は何ですか?

    3. Oracleでの動的SQLとストアドプロシージャのパフォーマンス

    4. MySQLからのデータセットの入力の進行状況を表示する