私はSSMSを調べていて、INT
列の「サイズ」が4バイト(予想)であることに気付きましたが、BIT
列が1バイトであることに少しショックを受けました。
私が見ているものを誤解しましたか?
テーブルで何ビットの列を定義しましたか?私はこれをMSDNで見つけました。8ビット以下のビット列が1バイトとして格納されると書かれています。
はい。
テーブルにbit
列が1つしかない場合、ストレージはbyte
を使用しますが、最大8つのbit
列を同じバイトに格納できるため、次の7つは「空き」です" その観点において。
NULL_BITMAP
についても、列ごとに1ビットのストレージが必要です(これも次のバイトに切り上げられます)。データページでは、これにbit
が許可されているかどうかに関係なく、すべての列のNULL
が含まれています(ただし、メタデータのみが変更されるため、後で追加できるnull-able列の 例外 行がまだ更新されていないALTER TABLE
経由)
BIT
は行ごとに1バイトを使用しますが、その1バイトのストレージに最大8つのBIT
フィールドをパックできます。
したがって、最初のフィールドのコストは1バイトですが、次の7つはfree!です。