列を null 許容 smallint として定義する場合、0 や 1 のような値を保存するには 2 バイトが必要であると想定されます。 。ただし、列が NULL に設定されている場合、どのくらいのスペースが占有されるのでしょうか?
PostgreSQL では、NULL 値には専用のストレージ スペースは必要ありません。代わりに、ビットマップを使用して、行内のどの列に NULL 値が含まれるかを示します。 1 つ以上の null を含む行の場合、適切なサイズ (最も近いバイトに切り上げられる) のビットマップが行のヘッダーに追加されます。
データ配置は重要な役割を果たします。メモリ管理における役割。 PostgreSQL では、HeapTupleHeader (行ヘッダー) は 23 バイトを占め、列データは常に MAXALIGN (通常は 8 バイト) の倍数に揃えられます。その結果、null ビットマップで利用できる行ヘッダー内に 1 バイトのパディングが存在します。
前述のデータ配置により、テーブルは最大数になります。最大 8 列には NULL 値を完全に無料で保存できます。この制限を超えると、追加の MAXALIGN バイトが次の 64 列に割り当てられます。ただし、この追加スペースは、行に実際の null 値が存在する場合にのみ占有されます。
列がテーブルから削除された場合でも、それらは引き続きビットを占有します。 pg_attribute システム カタログにリストされているままの場合は、null ビットマップに含まれます。その結果、削除された列が NULL ビットマップに必要なスペースに寄与する可能性があり、このスペースは VACUUM FULL 操作後でも保持される可能性があります。
PostgreSQL の NULL 値は、ビットマップ メカニズムを使用して効率的に保存されます。 。ただし、データの配置とテーブル内の列の数は、これらの値を格納するために必要なディスク領域の量に影響を与える可能性があります。これらの最適化手法を理解すると、データベースのパフォーマンスを最適化し、ストレージ要件を最小限に抑えることができます。
以上がPostgreSQL で NULL 値が実際に消費するディスク容量はどれくらいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。