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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-26 10:53:14418ブラウズ

How Much Disk Space Do NULL Values Actually Use in PostgreSQL?

PostgreSQL での NULL 値のディスク容量要件

データベース テーブルを作成するときは、特に列のストレージ要件を考慮することが重要です。 Null 許容値を扱う場合。 NULL 値の保存方法を理解すると、ディスク領域の使用を最適化できます。

NULL 値の保存

PostgreSQL では、NULL 値は、NULL ビットマップと呼ばれるビットマスクを使用して表現されます。 。ビットマップ内の各ビットは、テーブル内の列に対応します。ビットが 1 に設定されている場合、対応する列が NULL であることを示します。

NULL ビットマップによって占有されているディスク領域

NULL ビットマップのサイズは、テーブル内の列の数。列数が 8 以下のテーブルの場合、ビットマップは 1 バイトを占有します。 9 ~ 64 列のテーブルの場合、2 バイトを占有します。ただし、データの配置により、列の数に関係なく、少なくとも 1 つの NULL 値を含む行の最小ストレージ要件は 1 バイトです。

NULL 列のオーバーヘッド

NULL ビットマップ以外に、NULL 列の管理に必要な追加のバイトはありません。ただし、システム カタログ pg_attribute で「ドロップ済み」とマークされているドロップされた列は、引き続き Null ビットマップ内の 1 ビットを占有します。このオーバーヘッドは、ダンプ/リストア サイクルが実行されるまで持続する可能性があります。

例とテスト結果

次の列定義を持つテーブルを考えてみましょう:

"MyColumn" smallint NULL

この列に 0 または 1 の値を格納するには 2 バイトが必要です。 NULL 値の場合、次のストレージ要件が適用されます:

  • 8 列以下のテーブルの場合:

    • 追加のディスク容量なし
  • 9~64のテーブル用列:

    • null ビットマップの場合は 1 バイト
  • 64 列を超えるテーブルの場合:

    • 複数追加のバイトMAXALIGNs

広範なテストにより、これらのストレージ要件がすべてのテーブルで一貫していることが示されています。小さなテーブル (9 列未満) に NULL 値を格納してディスク領域の使用量を最適化すると有益ですが、大きなテーブルでは重要性が低くなります。

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

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