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

postgresql DBを使用してNULL値を格納するために必要なディスクスペースはどれくらいですか?

    Laramieはビットマップについて正しく、マニュアルの適切な場所にリンクしています。それでも、これはほとんど正しいですが、完全には正しくありません:

    したがって、1つ以上のヌルを含む特定の行の場合、それに追加されるサイズはビットマップのサイズになります(N列のテーブルの場合はNビット、切り上げ)。

    データアライメントを考慮に入れる必要があります。 HeapTupleHeader (行あたり)は23バイトの長さで、実際の列データは常にMAXALIGNの倍数で始まります (通常は8バイト)。これにより、ヌルビットマップで使用できる1バイトのパディングが残ります。事実上、最大8列のテーブルではNULLストレージは完全に無料です

    その後、別のMAXALIGN (通常は8)バイトが次のMAXALIGN * 8に割り当てられます (通常64)列。など常にユーザー列の総数(すべてまたはなし )。ただし、行に少なくとも1つの実際のNULL値がある場合に限ります。

    私はそのすべてを検証するために広範なテストを実行しました。詳細:

    • PostgreSQLでNULLを使用しない場合でも、ヘッダーでNULLビットマップを使用しますか?


    1. バインドされたパラメータを複数回使用する

    2. ORDER BY句は、ビュー、インライン関数、派生テーブル、サブクエリ、および一般的なテーブル式では無効です。

    3. ExcelファイルをSQLServerにインポートする方法は?

    4. pyodbcを使用してMSSQLServerへの一括挿入を高速化する方法