web-dev-qa-db-ja.com

SQL Serverのビット列は実際にバイト全体のスペースを使用しますか?

私はSSMSを調べていて、INT列の「サイズ」が4バイト(予想)であることに気付きましたが、BIT列が1バイトであることに少しショックを受けました。

私が見ているものを誤解しましたか?

20
Nate

テーブルで何ビットの列を定義しましたか?私はこれをMSDNで見つけました。8ビット以下のビット列が1バイトとして格納されると書かれています。

http://msdn.Microsoft.com/en-us/library/ms177603.aspx

17
SQLRockstar

はい。

テーブルにbit列が1つしかない場合、ストレージはbyteを使用しますが、最大8つのbit列を同じバイトに格納できるため、次の7つは「空き」です" その観点において。

NULL_BITMAPについても、列ごとに1ビットのストレージが必要です(これも次のバイトに切り上げられます)。データページでは、これにbitが許可されているかどうかに関係なく、すべての列のNULLが含まれています(ただし、メタデータのみが変更されるため、後で追加できるnull-able列の 例外 行がまだ更新されていないALTER TABLE経由)

14
Martin Smith

BITは行ごとに1バイトを使用しますが、その1バイトのストレージに最大8つのBITフィールドをパックできます。

したがって、最初のフィールドのコストは1バイトですが、次の7つはfree!です。

9
JNK