SQL Server UDT tamanhos 2005-2008
-
22-07-2019 - |
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?
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