Pergunta

No SQL Server 2005, definimos alguns UDT (User Datatypes definido) em em particular foi SK (para Surrogate Key). Estes foram definidos como 'int' 32 bits. E, consequentemente, o tamanho era de 4 bytes.

No SQL Server 2008, a UDT para os tipos de dados inteiros usa um mecanismo de armazenamento diferente, dependendo da precisão:

Armazenamento Exibe o tamanho máximo de armazenamento para o UDT. tamanhos máximos de armazenamento variam, com base na precisão.

Precision (dígitos) ..... Armazenamento (bytes)

1-9 ........................ 5

10-19 .................... 9

20 - 28 ................... 13

29-38 ................... 17

Uma consequência disto é que UDTs com base tanto int e bigint ocupará 9 bytes! NOTA: int nativa e bigint tipos de dados ainda ocupam 4 e 8 bytes, respectivamente

!

9 bytes parece muito pesado para um UDT chave substituta!

Alguém pode explicar por que isso acontece (em particular o que a lógica do projeto para esta era)? Como é que esta discrepância entre a UDT e tipos de dados nativos?

Há alguma alternativa aproxima além de não usar UDTs?

Foi útil?

Solução

Desculpe-me, mas parece-me que você entendeu errado. Lembre-se, "SELECT não está quebrado" e Microsoft não vai modificar uma peça crítica de seu motor sem anunciá-lo fortemente devido a problemas de conversão.

a tabela que você está citando vem de decimal e numérica de armazenamento em MSDN , que são, basicamente, mais de int

Se você estiver usando um alias de estrito, Usando tipos de dados especiais sugere fortemente que uma tipo> int

De qualquer forma, você pode verificar a pegada de seus tipos de dados, olhando para sys. tipos

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top