Eu estava bisbilhotando o SSMS e notei que o "tamanho" das minhas INT
colunas era de 4 bytes (esperado), mas fiquei um pouco chocado ao ver que minhas BIT
colunas eram um byte inteiro.
Eu entendi mal o que eu estava olhando?
Eu estava bisbilhotando o SSMS e notei que o "tamanho" das minhas INT
colunas era de 4 bytes (esperado), mas fiquei um pouco chocado ao ver que minhas BIT
colunas eram um byte inteiro.
Eu entendi mal o que eu estava olhando?
Quantas colunas de bits você definiu na tabela? Eu encontrei isso no MSDN, ele diz que colunas de 8 ou menos bits são armazenadas como um byte.
http://msdn.microsoft.com/en-us/library/ms177603.aspx
Sim.
Se você tiver apenas uma
bit
coluna na tabela, o armazenamento usa umbyte
, mas até 8bit
colunas podem ser armazenadas no mesmo byte, portanto, as próximas 7 são "livres" a esse respeito.Há também uma necessidade de armazenamento de 1 bit por coluna para
NULL_BITMAP
(novamente arredondado para o próximo byte). Nas páginas de dados, contém umbit
para todas as colunas, independentemente de permitirem ou nãoNULL
(com exceção das colunas anuláveis adicionadas posteriormente como uma alteração de metadados apenas por meioALTER TABLE
de onde a linha ainda não foi atualizada)BIT
usa um byte por linha, mas você pode compactar até 8BIT
campos nesse armazenamento de um byte.Portanto, o primeiro campo custa um byte, mas os próximos sete são gratuitos !