PostgreSQL では、NULL 値を許可する列のストレージ要件は、値を強制する列のストレージ要件とは異なります。次のテーブル列定義を考えてみましょう:
"MyColumn" smallint NULL
0、1、またはその他の値などの整数を格納するには 2 バイトが必要です。ただし、「MyColumn」が NULL に設定されている場合、どのくらいのディスク領域が消費されるのかという疑問が生じます。占有バイト数は 0 バイトですか?
ビットマップと NULL ストレージ
0 バイト消費という最初の想定に反して、NULL 値はスペースを占有しません。代わりに、PostgreSQL は ビットマップ を使用してテーブル内の各列の NULL ステータスを追跡します。ビットマップの各ビットは、特定の行の NULL/NOT NULL ステータスを表します。
ただし、ビットマップはすべての行に割り当てられるわけではありません。代わりに、データの配置が考慮すべき要素となります。各行に関する情報を含む HeapTupleHeader は 23 バイトを占めます。データは MAXALIGN の倍数 (通常は 8 バイト) で始まるように位置合わせされ、null ビットマップ用の 1 バイトのパディングが残ります。
ディスク容量要件
の結果これらの要因により、最大 8 列のテーブルに対して NULL ストレージは実質的に無料になります。ただし、より多くの列があるテーブルの場合は、次のように追加のディスク領域が必要です:
実世界テスト
広範なテストにより、これらの観察結果が確認されました。詳細については、次のディスカッションを参照してください。
以上がPostgreSQL の NULL 値は実際にどのくらいのディスク容量を消費しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。