Uma coluna de bits do SQL Server realmente usa um byte inteiro em espaço?

20

Eu estava mexendo no SSMS e percebi que o "tamanho" das minhas INTcolunas era de 4 bytes (esperado), mas fiquei um pouco chocado ao ver que minhas BITcolunas eram um byte inteiro.

Eu entendi mal o que estava vendo?

Nate
fonte
11
Eu me sentiria com sorte que as colunas BIT estejam alinhadas em um limite de bytes em vez de em um limite de palavras.
Mike Sherrill 'Cat Recall'

Respostas:

14

Sim.

Se você tiver apenas uma bitcoluna na tabela, o armazenamento usará, bytemas até 8 bitcolunas poderão ser armazenadas no mesmo byte, para que os próximos 7 estejam "livres" nesse sentido.

Também há uma necessidade de armazenamento de 1 bit por coluna para o NULL_BITMAP(novamente arredondado para o próximo byte). Nas páginas de dados, ele contém um bitpara todas as colunas, independentemente de permitirem ou não NULL(com exceção das colunas anuláveis ​​adicionadas posteriormente como metadados, apenas são alteradas por ALTER TABLEonde a linha ainda não foi atualizada)

Martin Smith
fonte
9

BITusa um byte por linha, mas você pode compactar até 8 BITcampos no armazenamento de um byte.

Portanto, o primeiro campo custa um byte, mas os próximos sete são gratuitos !

JNK
fonte