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?


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)


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 !

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.