ホームページ >データベース >mysql チュートリアル >PostgreSQL で NULL 値が実際に消費するディスク容量はどれくらいですか?

PostgreSQL で NULL 値が実際に消費するディスク容量はどれくらいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-28 21:52:12655ブラウズ

How Much Disk Space Does a NULL Value Actually Consume in PostgreSQL?

PostgreSQL データベースの Null 値ストレージについて

データベースを操作する場合、効率的なパフォーマンスを得るためにストレージ領域を最適化することが不可欠です。 NULL 値を扱うときによくある疑問が 1 つあります。NULL 値を保存するにはどのくらいのディスク容量が必要ですか?

PostgreSQL では、NULL 値の保存場所はコンテキストによって異なります。列「MyColumn」が「smallint NULL」として定義されている例を考えてみましょう。この場合、0 や 1 のような値を保存するには通常 2 バイトが必要です。

NULL 値の保存

「MyColumn」が NULL に設定されている場合、ストレージ要件はより微妙なものになります。直観に反して、NULL 値は 0 バイトを占有しません。代わりに、PostgreSQL はビットマップ インデックス作成と呼ばれる技術を使用して null を追跡します。テーブル内の行ごとに、どの列に NULL 値が含まれているかを示すビットマップが作成されます。

次に、このアプローチによるストレージへの影響を詳しく見てみましょう。

  • テーブル8 列未満: 最大 8 列のテーブルの場合、null ビットマップは行のヘッダーに保存され、それ以外の場合はパディングの未使用バイト。したがって、このようなテーブルに NULL 値を格納しても、追加のスペース オーバーヘッドは事実上ありません。
  • 8 列以上のテーブル: 8 列以上のテーブルの場合、NULL ビットマップには MAXALIGN の追加スペースが必要です。バイト (通常は 8 バイト)。このスペースは、列に NULL 値が含まれているかどうかに関係なく、すべての行に割り当てられます。

追加の考慮事項

  • 配置: メモリ アクセスを最適化するには、行データを特定の境界に揃える必要があります。 Null ビットマップが残りのパディング スペースに収まらない場合は、配置バイトが追加される可能性があり、ストレージ要件が増加する可能性があります。
  • ドロップされた列: テーブルから削除された列も含まれます。定義は依然として null ビットマップに反映され、少しのスペースを占有する可能性があります。 VACUUM FULL ではこのスペースを削除できないため、再利用するにはダンプ/復元サイクルが必要です。

以上がPostgreSQL で NULL 値が実際に消費するディスク容量はどれくらいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。