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.