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

PostgreSQL の NULL 値は実際にどのくらいのディスク容量を消費しますか?

Susan Sarandon
リリース: 2024-12-26 03:26:10
オリジナル
816 人が閲覧しました

How Much Disk Space Do NULL Values in PostgreSQL Really Consume?

PostgreSQL のディスク容量消費に対する NULL 値の影響

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 ストレージは実質的に無料になります。ただし、より多くの列があるテーブルの場合は、次のように追加のディスク領域が必要です:

  • 追加の MAXALIGN バイト (通常は 8) が、64 列の次のグループに割り当てられます。
  • 領域は少なくとも 1 つの実際の NULL 値が行に存在する場合にのみ割り当てられます。
  • システム カタログ内でそのようにマークされた列が削除されました。 null ビットマップ内のビットを占めています。

実世界テスト

広範なテストにより、これらの観察結果が確認されました。詳細については、次のディスカッションを参照してください。

  • https://dba.stackexchange.com/questions/4452/does-not-using-null-in-postgresql-still-use-a -ヘッダー内の null ビットマップ

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート