1. ホーム
  2. sql-server

[解決済み] SQL Serverで "Null "値を使用する場合のサイズについて

2022-07-08 08:02:18

質問

10個のカラムを持つ大きなテーブルがあります。それらのうちの4つは、ほとんどの場合、NULLのままです。私は、NULL値が任意のサイズまたはバイトのサイズなしを取るクエリを持っています。私はそれらのいくつかは言っているいくつかの記事を読んだ。

http://www.sql-server-citation.com/2009/12/common-mistakes-in-sql-server-part-4.html

<ブロッククオート

テーブルの中に NULL 値があれば、ストレージ スペースを占有しないという誤解があります。実際には、NULL 値は 2 バイトのスペースを占有しています。

SQLです。NULL 値の使用とデフォルト値の比較

A NULL の値は、データベースにおけるシステム値で、1 バイトのストレージを占め、スペースやゼロなどのデフォルト値とは対照的に、値が存在しないことを示すものです。

ヌル値によって取得されるサイズについて教えてください。

どのように解決するのですか?

フィールドが固定幅の場合、NULLを格納すると、他の値と同じスペース(フィールドの幅)を取ります。

フィールドが可変幅の場合、NULLの値はスペースを取りません。

NULL 値を格納するために必要なスペースに加えて、NULL 可能な列を持つためのオーバーヘッドもあります。各行で、1 つのビットが null 可能な列ごとに使用され、その列の値が null か否かをマークします。これは、列が固定長であっても可変長であっても同じです。


他のソースからの情報で観察された不一致の理由。

  • 最初の記事の冒頭は少し誤解を招く表現です。この記事は、NULL 値を保存するコストについて述べているのではなく、NULL 値を保存するために必要な 能力 のコスト(つまり、カラムをNULL化するコスト)について述べています。列を NULL 可能にするためにストレージ スペースがかかるのは事実ですが、いったんそれを行うと、NULL を格納するために必要なスペースは、(可変幅の列の場合)値を格納するために必要なスペースよりも小さくなります。

  • 2つ目のリンクは、Microsoft Accessに関する質問のようです。AccessがNULLをどのように保存するのか詳細は知りませんが、SQL Serverとは異なっていても不思議ではありません。