これについて正確な情報を見つけるのは本当に難しいようです。MSDNには、スパース列に関する記事があり、それらを使用するときにどの null パーセンテージしきい値を考慮する必要があります。しかし、デフォルトの null ストレージ スペースの使用に関する事実を把握するのは非常に難しいようです。
一部の情報源は、NULL 値はスペースをまったく必要としないと主張していますが、それはそもそもスパース列が無意味であることを意味します。テーブル定義の null ビットマップだけが null 許容列を表すビットを追加するだけで、それ以上のオーバーヘッドはないと主張する人もいます。固定長の列 (char、int、bigint など) は、値が null であるかどうかに関係なく、実際には同じ量のストレージ スペースを使用すると主張する人もいます。
それで、それは本当にどれですか?
テーブル内の合計行数と、各列と型ごとの NULL 行の数を含む、DB 内のすべての null 許容列のリストがあるとします。NULL 値が現在使用しているスペースを正確に計算するにはどうすればよいでしょうか。代わりに、列をスパースに変更することで節約されるスペースを正確に予測できますか? null 以外の行に 4 バイトのオーバーヘッドを追加することはできますが、null 行をどうすればよいかわからない場合は役に立ちませんか?